Как заставить 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