Gợi ý kiểu biến trong Netbeans (PHP)


85

Bạn chỉ cần tò mò nếu có cách nào trong netbeans để đưa ra gợi ý kiểu cho các biến thông thường, để intellisense chọn nó. Tôi biết bạn có thể làm điều đó cho các thuộc tính lớp, tham số hàm, kiểu trả về, v.v. nhưng tôi không thể tìm ra cách làm điều đó cho các biến thông thường. Đó là thứ thực sự hữu ích trong những tình huống mà bạn có một phương thức có thể trả về các kiểu đối tượng khác nhau (như bộ định vị dịch vụ).

ví dụ như:

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

Khi sử dụng $ someService sau đó, netbeans sẽ cung cấp tất cả các phương thức có sẵn được xác định trong lớp Some_Service.


1
Điều này hoạt động bên trong một lớp, đối với các thành viên, nhưng tôi không biết cách thực hiện nó trong các hàm hoặc mã thủ tục.
David Snabel-Caunt

1
Tôi nghĩ về việc đổi tên nó thành kiểu Variable gợi ý trong PHP IDE vì loại nhận xét này sẽ hoạt động trong tất cả các IDE phổ biến (NEtBeans, Eclipse, ...).
shadyyx

Câu trả lời:


186

Một dòng duy nhất là tất cả những gì bạn cần:

/* @var $varName Type_Name */

Xem bài viết này trong Blog NetBeans PHP: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Lưu ý: Ít nhất, trong phiên bản 8.2; Chìa khóa dường như là:

  • Dấu hoa thị đơn ( /*thay vì /**).
  • Đặt kiểu sau tên biến.
  • Không có gì trước và sau gợi ý kiểu (ngoại trừ khoảng trắng, nhưng ngay cả điều đó cũng không được phép khi chú thích không nằm trong một dòng).

16
Chìa khóa ở đây dường như là dấu hoa thị đơn / * thay vì / **. Ít nhất, trong phiên bản 8.0. Cảm ơn.
Cypher

1
Có vẻ như không làm việc ở tất cả nếu chúng ta cần phải sử dụng vdoc cho tài sản đối tượng, tức là cho $this->obj = $serviceLocator->get('obj');nếu tôi sử dụng /* @var $obj Obj */nó không làm việc ...
shadyyx

2
@shadyyx Trường hợp này bạn nên dùng /** @var Type_Name */, xem bài này ?
Apostle

6
Hãy nhớ rằng bạn có thể gõ vdocvào dòng phía trên biến mà bạn sẽ lập tài liệu rồi nhấn Tabvà điều đó sẽ hoạt động như một macro để tự động tạo khối doc @johannes các bài đăng ở trên.
Tom Auger

1
Nếu bạn muốn NetBeans cũng hỗ trợ các cú pháp thay thế, vui lòng bình luận / bỏ phiếu cho yêu cầu tính năng: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

Tôi biết đây là một câu hỏi cũ hơn, nhưng tôi đã tìm kiếm một câu trả lời tương tự cho Eclipse / Zend Studio và điều này cũng đã giải quyết được nó.

** Tuy nhiên, lưu ý rằng nó phải nằm trên một dòng với việc mở và đóng rõ ràng theo kiểu này ...

/* @var $varName Type_Name */

Không có định dạng nào khác cho dù ...

/**
 * @var $varName Type_Name
 */ 

hoặc là...

// @var $varName Type_Name

dường như hoạt động ở tất cả. Hy vọng rằng sẽ giúp một ai đó.


Sử dụng phương pháp dấu gạch chéo kép được liệt kê cuối cùng đã không làm việc cho tôi trong NetBeans 7.2
David

1
@David Nó có thể không đọc tốt, nhưng tôi đã nói rằng CHỈ có tác phẩm đầu tiên. Mặc dù cả hai nhận xét còn lại đều là nhận xét hợp lệ, cả hai đều không hoạt động với hệ thống gợi ý loại, ít nhất là về phía nhật thực, không chắc chắn về NetBeans.
oucil

1
Netbeans (8.01) chỉ chấp nhận tùy chọn đầu tiên, sử dụng / *, nhưng phpStorm (8) cũng hỗ trợ / **.
Jop van Raaij

9

Bạn đang muốn ghi lại những biến số ma thuật khó chịu đó? (Tôi đã làm; Câu hỏi này hiện xếp hạng kết quả hàng đầu cho câu hỏi đó trên Google. Tôi hy vọng điều này sẽ giúp ích cho ai đó!)

Các @propertythẻ cho phép bạn ghi lại ma thuật biến php - những triển khai sử dụng __get()__set(). Thẻ nên được sử dụng trong tài liệu ngay trước định nghĩa lớp:

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

Ký hiệu này kích hoạt tính năng tự động hoàn thành, được thử nghiệm trong Netbeans 8.1 và PhpStorm 2016.1.

nhập mô tả hình ảnh ở đây


3

Theo báo cáo lỗi này , cú pháp sẽ thay đổi trong NetBeans 9 :

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

Ngoài ra, điều đáng nói là bạn có thể thêm []vào một tên lớp để chỉ ra một mảng các đối tượng:

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

Và đừng quên usetuyên bố của bạn , ví dụ:use Foo;


2

Trong netbeans 8.0.2, mẫu vdoc cung cấp cho bạn điều này:

/* @var $variable type */

Tuy nhiên, Netbeans sẽ không nhận ra điều này và sẽ không cung cấp cho bạn danh sách tự động hoàn thành chính xác cho các đối tượng của bạn. Thay vào đó, hãy sử dụng điều này, ngay trước khai báo biến của bạn:

/** @var objectType $varName */

Tôi đã không thực sự thấy một cách sử dụng tuyệt vời cho Mẫu vdoc cổ phiếu , đặc biệt là đối với các biến lớp sẽ được sử dụng làm đối tượng PDO hoặc PDOStatement.

Một giải pháp mà tôi sử dụng thực sự là vào Công cụ / Tùy chọn / Trình chỉnh sửa / Mẫu mã (với PHP được chọn làm Ngôn ngữ của bạn) và thêm Mẫu mới. Tôi đã gọi gợi ý của mình . Sau đó, trong Văn bản mở rộng, hãy sử dụng mẫu sau:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

3
Hm, tôi có NB 8.0.2 và đối với tôi thì ngược lại. Kiểu biến / * @var $ * / hoạt động tốt. Tôi đã cố gắng sử dụng bản vá của bạn cho các Mẫu. nhưng nó không hoạt động.
userfuser

1
Tôi không chắc chắn chính xác điều gì đang xảy ra với bản sao netbeans của mình khi lần đầu tiên tôi đăng điều kinh ngạc này, nhưng hiện tôi đang sử dụng 8.2. / * @var $ varName varType * / hoạt động tốt.
Mike

0

Đối với NetBeans IDE 8.2, cú pháp như sau:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

Điều này ít nhất sẽ cung cấp gợi ý kiểu phù hợp cho các biến tĩnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.