Явный ввод в свойстве экземпляра

#phpstorm #jetbrains-ide #phpdoc

Вопрос:

Чтобы помочь моему редактору лучше понять мой код, мне иногда нужно добавлять комментарий, подобный этому:

 /* @var $container Container */
 

Это хорошая работа, но иногда мне нужно было бы что-то подобное:

 /* @var $this->container Container */
 

Есть ли что-то подобное?

Комментарии:

1. 1) Что это за язык? Это PHP, и вы пытаетесь сделать наброски с помощью PHPDoc? 2) Если это PHP — где вы пытаетесь использовать такой комментарий к документу: встроенный (в середине метода) или в объявлении свойства? Пример кода, который показал бы этот момент, был бы очень полезен.

2. @LazyOne Это действительно PHP, этот комментарий находится в середине функции. Вот пример: « $kcmClients = клиент::getActiveEventPushClients(); еогеасп ($kcmClients как $клиент) { /* @VAR в $клиент-клиент * клиент::setActiveClient($клиент, правда); $remotePush = RemotePushModel::получить(); если ($remotePush->выполняется()) { продолжить; } /*остальной код*/ }« вот ссылка на документацию phpdoc об этом manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/…

3. Я описал правильное использование @var тега PHPDoc. В вашем случае (пример кода) его нормально использовать @var , если Client::getActiveEventPushClients() он неправильно напечатан. Попробуйте добавить @return Client[] для этого метода-это даст достаточно информации для PhpStorm, чтобы понять, что $kcmClients это массив Client экземпляров, и он автоматически определит тип для $client него в цикле foreach). Если вы Client::getActiveEventPushClients() , конечно, сможете отредактировать код…

Ответ №1:

Сначала несколько вещей:

1. Комментарии PHPDoc начинаются с /** .

По соображениям совместимости PhpStorm также понимает теги PHPDoc в обычных /* комментариях, но вам лучше использовать для них правильные символы.

2. Правильный порядок элементов для встроенного @var тега можно увидеть здесь:
https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-tags.md#517-var

 /** @var [type] [element_name] [<optional description>] */
 

напр.

 /** @var Container $container */
 

Так же, как и в случае #1: PhpStorm понимает такие комментарии, даже если элементы меняются местами (для совместимости с другими (старыми) IDEs / старый код).


Ваш актуальный вопрос:

Встроенный @var позволяет вводить только локальные / обычные переменные. Вы НЕ МОЖЕТЕ использовать его для составных переменных (не можете использовать $this->container или $someObject->someVar здесь).

Это неправильно:

 /* @var $this->container Container */

// even if it uses correct order/style
/** @var Container $this->container */
 

Во всяком случае: такие типы должны быть указаны в фактическом классе, над фактическим объявлением свойств (где вы опускаете [element_name] часть). https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-tags.md#examples-15

 class MyAwesomeClass
{
    /** @var Container Optional description here */
    protected $container;
    ...
}