2011-10-22 30 views
16

Tôi khá mới đối với PHP và tôi mới bắt đầu sử dụng NetBeans để phát triển mã PHP của mình.Tại sao phải khai báo loại biến PHP trong một nhận xét?

Trong số màu xanh dương, khi tôi nhập một biến trong truy vấn, một hộp thoại xuất hiện và yêu cầu tôi hoàn thành nhận xét để giữ loại biến. Tôi đã làm một số điều tra và thấy rằng đây có vẻ là một tính năng phổ biến của NetBeans, nhưng tôi không thể tìm thấy bất kỳ thông tin nào để giải thích cho tôi lý do tại sao đây là trường hợp.

Tại sao một người nào đó muốn đặt loại biến PHP trong nhận xét? Là nó để sử dụng phát triển, hay nó thực sự có lợi cho chính mã? Là nó không thể thiếu, hoặc tùy chọn?

+0

Bạn có thể đăng một ví dụ về ý của bạn không? –

+0

@AurelioDeRosa - Đây là liên kết đến trang mô tả tính năng: http://blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a – stefmikhail

+0

Ồ ... giờ tôi hiểu ý của bạn là gì. Vâng, câu trả lời của Jonathan Spooner là câu trả lời đúng. –

Trả lời

28

Thêm loại trong thẻ @var vào trong nhận xét của phương thức sẽ cho phép NetBeans hiển thị cho bạn mã hoàn thành. Điều này tất nhiên là tùy chọn nhưng nó luôn luôn là một ý tưởng tốt để tài liệu đầy đủ mã của bạn.

Chỉnh sửa: Mẹo để NetBeans tự động tạo nhận xét cho bạn là sử dụng mở rộng /**. Để thực hiện việc này, chỉ cần đặt con trỏ lên trên thuộc tính hoặc phương thức bạn muốn tạo tài liệu và nhập /** rồi nhấn phím ENTER. Điều này sẽ mở rộng nhận xét kiểu phpDoc và thêm các thẻ thích hợp.

Chỉnh sửa 2: Bạn có thể sử dụng thẻ @var trên một bất động sản và bạn có thể sử dụng thẻ @param trên một phương pháp để đạt được tác dụng tương tự với các tham số được truyền vào một phương pháp.

Sử dụng thẻ @var trên một bất động sản sẽ cung cấp cho bạn những gợi ý mã trong khi sử dụng bất động sản bất kỳ nơi nó có thể nhìn thấy:

/** 
* 
* @var My_Type 
*/ 
private $_myProperty; 

Sử dụng thẻ @param trên một phương pháp sẽ cung cấp cho bạn những gợi ý mã trong khi sử dụng tham số bên trong phương pháp:

/** 
* 
* @param My_Type $obj 
*/ 
public function myMethod($obj) { 

} 

một cách khác để đạt được một hiệu ứng tương tự khi cũng cung cấp một lượng ít các loại an toàn là sử dụng cơ chế type hinting PHP:

public function myMethod(My_Type $obj) { 

} 

Lưu ý rằng phương thức này có loại được chỉ định trong chữ ký phương thức. NetBeans bây giờ sẽ cung cấp cùng một mã hoàn thành bên trong phương thức có sẵn bằng cách sử dụng thẻ @param và PHP sẽ tạo ra một E_RECOVERABLE_ERROR nếu loại được chuyển vào phương thức không phải là cùng một loại được chỉ định. Xem PHP's documentation regarding errors và cách xử lý chúng nếu bạn quan tâm đến việc tìm hiểu thêm về lỗi trên.

+0

Trong trường hợp của tôi, tôi có một biến '$ khoản' và tôi biết bằng cách sử dụng' gettype ($ khoản) 'rằng kiểu là' string' nhưng tự động điền trong NetBeans không có 'chuỗi' như một tùy chọn . Có phải nó dưới một cái tên khác trong NetBeans? Bạn có thể cho tôi một ví dụ về cú pháp cho trường hợp của tôi không? – stefmikhail

+0

Thẻ var sẽ chỉ hỗ trợ hoàn thành mã cho các loại hoặc lớp do người dùng xác định có trong lib php. Xem phần chỉnh sửa cho mẹo –

+0

Cảm ơn, nhưng tôi vẫn gặp sự cố khi chọn loại cho biến của tôi. Có tài liệu nào đó có thể mô tả các loại biến không? Tất cả các tùy chọn có sẵn trong NetBeans là nước ngoài với tôi, và tôi không chắc chắn để lựa chọn. Như tôi đã nói, tôi đã sử dụng 'gettype' để tìm kiểu biến cho' $ clause' là 'chuỗi'. Tuy nhiên, không có loại 'chuỗi' nào làm tùy chọn. Tôi có sử dụng phương pháp sai không? – stefmikhail

1

Vì PHP là ngôn ngữ được đánh máy/vịt, khi bạn tạo một chương trình lớn, các gợi ý kiểu đó có thể giúp bạn hoặc người khác hiểu được những gì đang diễn ra nếu vấn đề phát sinh. Ví dụ, mong đợi một loại hỗn hợp và gửi một số nguyên.

+0

http://php.net/manual/en/language.oop5.typehinting.php –

9

Tôi đoán bạn đang nói về một cái gì đó như thế:

/** 
* @var SimpleXMLElement $xml 
*/ 
private $xml; 

này được gọi như vậy phpDoc comment. Nó cho phép bạn tạo tài liệu API (like this one for instance). Hơn nữa, hầu hết các IDE bao gồm Eclipse và NetBeans cũng hỗ trợ cú pháp đó, và cung cấp hoàn thành mã động vv

2

Mặc dù netbeans sử dụng nó cho autocompletion nó thường là hữu ích cung cấp tư liệu mã của bạn:

Trong trường hợp này bạn biết những gì phương pháp này được và những gì nó trả nhưng bên trong mã bạn không có ý tưởng những gì đang xảy ra

/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    $factoredObj = getObject($someObj); //you are not sure what type it returns 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

Bạn có thể bình luận nó với /* @var $variable type */ bên trong mã

/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    /* @var $factoredObj someType */ 
    $factoredObj = getObject($someObj); 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

hoặc

$factoredObj = getObject($someObj); /* @var $factoredObj someType */ 
7

Nếu bạn muốn khai báo kiểu biến trong trường hợp biến không phải là thuộc tính lớp mà chỉ là biến chứa một số giá trị trả về, hãy sử dụng nhận xét một sao theo sau @var. và cuối cùng là loại biến đó. Ví dụ:

/* @var $errorMessage NotificationMessage */ 
$errorMessage= $allMessages->rewind()->current(); 

sẽ thông báo cho NetBeans hoặc PhpStorm rằng $ errorMessage là phiên bản của NotificationMessage và bạn sẽ hoàn thành mã cho biến đó.

+1

Điều này cũng hoạt động với PHPStorm. – Buffalo

Các vấn đề liên quan