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

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

экс что-то вроде:

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

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


person rr.    schedule 25.11.2009    source источник
comment
Это работает внутри класса для членов, но я не знаю, как это сделать в функциях или процедурном коде.   -  person David Snabel-Caunt    schedule 25.11.2009
comment
Я бы подумал о переименовании этого в Подсказка типа переменной в PHP IDE, так как этот тип комментариев должен работать во всех распространенных IDE (NEtBeans, Eclipse, ...).   -  person shadyyx    schedule 14.11.2013


Ответы (6)


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

/* @var $varName Type_Name */

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

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

  • Одна звездочка (/* вместо /**).
  • Размещение типа после имени переменной.
  • Не иметь ничего до и после подсказки типа (кроме пробелов, но и это не допускается, когда комментарий не в одну строку).
person johannes    schedule 25.11.2009
comment
Ключевым моментом здесь является одна звездочка /* вместо /**. По крайней мере, в версии 8.0. Спасибо. - person Cypher; 23.06.2014
comment
Кажется, это вообще не работает, если нам нужно использовать vdoc для свойства объекта, то есть для $this->obj = $serviceLocator->get('obj');, если я использую /* @var $obj Obj */, это не работает... - person shadyyx; 05.02.2015
comment
@shadyyx В этом случае вы должны использовать /** @var Type_Name */, см. этот пост? - person Apostle; 06.02.2015
comment
Помните, что вы можете ввести vdoc в строке над переменной, которую вы собираетесь документировать, а затем нажать Tab, и это будет действовать как макрос для автоматического создания блока документов @johannes выше. - person Tom Auger; 04.03.2015
comment
все еще вижу, что PHPDoc не найден :( - person Junaid Atari; 15.09.2015
comment
Длинный выстрел, но знаете ли вы, можно ли для типа использовать переменную? Например. У меня есть переменная, которая может быть либо My_Class_One, либо My_Class_Two, инициализированной как $class = new $myClass();, и я хотел бы иметь возможность подсказывать как /* @var $class $myClass */ - person TMH; 06.01.2016
comment
Извините, что обновляю старую тему, но кто-нибудь знает, возможно ли vdoc несколько переменных в одном комментарии? потому что много последовательных строк комментариев, таких как /* @var ... ... */ /* @var ... ... */, выглядит не очень хорошо, когда я указываю входящие переменные, которые определены в другом файле. - person Denis Alexandrov; 20.01.2016
comment
Если вы хотите, чтобы NetBeans также поддерживал альтернативный синтаксис, прокомментируйте/проголосуйте за запрос функции: netbeans.org/bugzilla/show_bug.cgi?id=267470 - person marcovtwout; 23.05.2017
comment
Синтаксис кода Visual Studio. /** @var ClassName $yourVaribleName */ Работает одно и многострочно. - person DevWL; 30.11.2018

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

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

/* @var $varName Type_Name */

Никаких других форматов, будь то...

/**
 * @var $varName Type_Name
 */ 

or...

// @var $varName Type_Name

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

person oucil    schedule 04.09.2012
comment
Использование метода двойной косой черты, указанного последним, не сработало для меня в NetBeans 7.2. - person David; 27.02.2013
comment
@David Возможно, это не очень хорошо читается, но я сказал, что работает ТОЛЬКО первое. Хотя оба других являются действительными комментариями, ни один из них не работает с системой подсказок типа, по крайней мере, в отношении eclipse, не уверен в NetBeans. - person oucil; 27.02.2013
comment
Netbeans (8.01) принимает только первый вариант с использованием /*, но phpStorm (8) также поддерживает /**. - person Jop van Raaij; 10.11.2014

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

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

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

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

введите описание изображения здесь

person GHH    schedule 11.05.2016

Согласно этому отчету об ошибке, синтаксис изменится в 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;

person rybo111    schedule 27.01.2018
comment
Вот почему. Спасибо - это сработало для меня. - person Pangamma; 25.06.2021

В 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"} */
person Mike    schedule 28.03.2015
comment
Хм, у меня NB 8.0.2 и у меня все наоборот. Тип переменной /* @var $variable */ работает нормально. Я пытался использовать ваш патч для шаблонов. но это не сработало. - person userfuser; 08.10.2015
comment
Я точно не знаю, что происходило с моей копией netbeans, когда я впервые опубликовал этот ответ, но сейчас я использую 8.2. /* @var $varName varType */ отлично работает. - person Mike; 13.11.2017

Для NetBeans IDE 8.2 синтаксис выглядит следующим образом:

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

Это обеспечит правильные подсказки типа, по крайней мере, для статических переменных.

person andreszs    schedule 09.10.2020