Указание переменной типа в Netbeans (PHP)
Просто любопытно, есть ли способ в netbeans давать подсказки типа для регулярных переменных, чтобы intellisense их подбирал. Я знаю, что вы можете сделать это для свойств класса, параметров функции, типов возврата и т.д., Но я не могу понять, как это сделать для регулярных переменных. Это то, что действительно поможет в ситуациях, когда у вас есть метод, который может возвращать разные типы объектов (например, локатор сервисов).
ex что-то вроде:
/**
* @var Some_Service $someService
*/
$someService = ServiceLocator::locate('someService');
При использовании $someService впоследствии netbeans предоставит все доступные методы, определенные в классе Some_Service.
Ответы
Ответ 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;