#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;
...
}