phpstorm - как описать переменную phpdoc'ом вне класса?

830
29 декабря 2016, 10:01

Внутри класса описываю переменную:

class Database
{  
    /**
     * @var \PDO
     */
    private $dbh;
}

И автоподстветка методов работает:

$this->dbh->prepare($sql);

Данный пример (выше) не относится к проблеме ниже!

Вне класса почему-то не пашет (на скриншоте контроллер, по сути это файл целиком), phpstorm не видит phpdoc-блок и подсвечивает красным метод объекта "Метод .... не найден." Как побороть бяку?

Скринпук

Answer 1

Попробуйте указать в аннотации название переменной

/**
 * @var \core\Track $response
 */
$response = new $class($code,$service_id);

Внутри метода данная аннотация может располагаться где угодно(не обязательно над объявлением переменной), поэтому PhpStorm по всей видимости игнорирует данные аннотации без название переменной, к которой она должна применяться.

см. https://phpdoc.org/docs/latest/references/phpdoc/tags/var.html

Также следите за правильностью написания неймспейса(PhpStorm может не отобрать подсказки если ему он не понравился)

Answer 2

С первого раза недопонял проблему.

По скрину могу предположить, что у вас аннотация объявленна внутри метода. PhpStorm определяет эту переменную как локальную переменную, объявленную в этом методе и вполне естественно, что она недоступна за пределами этого метода(я уже не говорю про класс)

Для того чтобы она была доступна извне - расположите аннотацию над объявлением свойства класса (НЕ ВНУТРИ МЕТОДА - так она будет доступна извне)

/**
 * Assetic token parser.
 *
 * @author Kris Wallsmith <kris@symfony.com>
 */
class AsseticTokenParser extends BaseAsseticTokenParser
{
    /**
     * @var TemplateNameParserInterface|null
     */
    private $templateNameParser;
    private $enabledBundles;
    //....
}

см: https://phpdoc.org/docs/latest/references/phpdoc/tags/var.html

Или с помощью аннотации @property в блоке комментариев над классом. Его используют для обозначения, поддерживаемых магическими методами(перехватчиками) свойств класса. В частности так часто обозначают свойства в моделях ActiveRecord. Могу напутать с последовательностью типа и названия переменной - можете попробовать и так и так.

/**
 * Blank
 *
 * @property \App\Component $component 
 * @property \App\Test $test 
 */
class Blank
{
    // указанные свойства будут отображаться как объявленные свойства класса
    // PhpStorm после индексации будет поддерживать автокомплит и подсказки для этих свойств
    //...
}

см. https://phpdoc.org/docs/latest/references/phpdoc/tags/property.html

READ ALSO
Как получить такого вида УРЛ?: im?tuta=params1

Как получить такого вида УРЛ?: im?tuta=params1

Друзья, подскажите пожалуйста как сделать урл подобного вида: im?tuta=params1Ибо на сайте есть панелька, она на поддомене, и мне нужно для каждой...

739
Добавление нового поля из фронтентд modx

Добавление нового поля из фронтентд modx

Подскажите, нашел статью добавления нового поля в форме, а как теперь мне создать в админке в ресурсе доп поля созданного инпута?

599
file_get_contents оптимизация кода php sql

file_get_contents оптимизация кода php sql

На странице в коде есть запрос на получение всегоВ т ч и путь к картинке $ava_way

602
react-native - как работать с ssl/tls

react-native - как работать с ssl/tls

Всем здравствуйтеГуглил, не нашёл ответа на свой вопрос

779