Подтвердить что ты не робот

Указание переменной типа в Netbeans (PHP)

Просто любопытно, есть ли способ в netbeans давать подсказки типа для регулярных переменных, чтобы intellisense их подбирал. Я знаю, что вы можете сделать это для свойств класса, параметров функции, типов возврата и т.д., Но я не могу понять, как это сделать для регулярных переменных. Это то, что действительно поможет в ситуациях, когда у вас есть метод, который может возвращать разные типы объектов (например, локатор сервисов).

ex что-то вроде:

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

При использовании $someService впоследствии netbeans предоставит все доступные методы, определенные в классе Some_Service.

4b9b3361

Ответ 1

Одна строка - это все, что вам нужно:

/* @var $varName Type_Name */

См. Эту статью в блоге PHP NetBeans: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in.

Примечание: по крайней мере, в версии 8.2; Ключ, кажется,:

  • Единственная звездочка (/* вместо /**).
  • Размещение типа после имени переменной.
  • Не иметь ничего до и после подсказки типа (кроме пробелов, но даже это не допускается, когда комментарий не находится в одной строке).

Ответ 2

Я знаю, что это старый вопрос, но я искал аналогичный ответ для Eclipse/Zend Studio, и это также решило его.

** Обратите внимание, что это должно быть на одной строке с открытием и закрытием явно в этом стиле...

/* @var $varName Type_Name */

Нет других форматов,...

/**
 * @var $varName Type_Name
 */ 

или...

// @var $varName Type_Name

казалось, работал вообще. Надежда, которая помогает кому-то.

Ответ 3

Вы хотите документировать эти противные волшебные переменные? (Я сделал; этот вопрос в настоящее время занимает первое место в Google. Надеюсь, это кому-нибудь поможет!)

Тег @property позволяет документировать магические переменные php - те, которые реализованы с помощью __get() и __set(). Тег должен использоваться в документации, непосредственно предшествующей определению класса:

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

Эта нотация запускает автозаполнение, протестированное в Netbeans 8.1 и PhpStorm 2016.1.

enter image description here

Ответ 4

В netbeans 8.0.2 шаблон vdoc дает вам следующее:

/* @var $variable type */

Netbeans не распознает это, но не даст вам правильный список автозаполнения для ваших объектов. Вместо этого используйте это, как раз перед объявлением переменной:

/** @var objectType $varName */

Я не очень хорошо использовал шаблон vdoc, особенно для переменных класса, которые будут использоваться в качестве объектов PDO или PDOStatement.

Одно из решений, которое я использую, - это Инструменты/Параметры/Редактор/Шаблоны кода (с выбранным PHP как ваш язык) и добавьте новый шаблон. Я назвал мой намек. Затем в расширенном тексте используйте следующий шаблон:

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

Ответ 5

Согласно этому отчету об ошибках, синтаксис в NetBeans 9 изменится:

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

Также стоит упомянуть, что вы можете добавить [] к имени класса, чтобы указать массив объектов:

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

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

И не забывайте свое выражение об use, например, use Foo;