Как заставить intellisense работать с phpStorm при передаче объекта в функцию или итерации

У меня есть объект с геттерами и сеттерами, но я теряю intellisense на этом объекте, когда я передаю его функции или при итерации через массив этих объектов.

например:

...
$personA = new Person(..);
$age = $personA->getAge();  // intellisense works.

$personArray = array($personA, $personB, .. );
foreach($personArray as $aPerson){
   $aPerson->getAge();   //  no intellisense here
}

doSomething($personA); 



function doSomething($person){
   $person->getAge()         //  no intellisense here
   ...
}

что я пропустила?

Мне нужно внести изменения в код(литья.. etc), отсутствует настройка phpStorm? Может быть, это невозможно?

2 ответов


первый foreach case это не (Пока) возможно из коробки, однако вы обычно можете намекнуть, что:

$personArray = array($personA, $personB, .. );
foreach ($personArray as $aPerson) {
   /* @var $aPerson Person */
   $aPerson->getAge();  // now with code-completition
}

который делает тип-намек на переменную, которая принимает итерацию. В качестве альтернативы вы также можете сделать тип-намек на переменную массива:

/* @var $personArray Person[] */
$personArray = array($personA, $personB, .. );
foreach ($personArray as $aPerson) {
    $aPerson->getAge();  // now with code-completition
}

для вашего второго случая вы можете добавить PHP type-hinting (который я рекомендую):

function doSomething(Person $person) {
   $person->getAge() //  now with code-completition
   ...
}

Это также гарантирует, что вы можете передавать только значения этого типа. См. как ну!--12-->Тип Намекая Docs и интерфейсы Docs.

другое решение для второго случая-также документировать параметр в docblock функции:

/**
 * @param Person $person
 */
function doSomething($person) {
   $person->getAge() //  now with code-completition
   ...
}

Некоторые Связанные Ответы:


пока PPHDoc кварталах от @hakre ответ работает в PHPStorm, правильной формой будет тип, за которым следует имя переменной, подобное этому

/** @var Person $aPerson */

и

/** @var Person[] $personArray */

Они будут работать в PHPStorm и phpDocumentor.

источник:http://www.phpdoc.org/docs/latest/references/phpdoc/tags/var.html