Ответ 1
Для первого случая foreach
он пока недоступен из коробки, однако вы можете обычно намекать, что:
$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 (которую я рекомендую):
function doSomething(Person $person) {
$person->getAge() // now with code-completition
...
}
Это также гарантирует, что вы можете передавать только те значения этого типа. См. Также Тип Hinting Docs и Интерфейсы Документы.
Другим решением для второго случая является также документировать параметр в док-блоке функции:
/**
* @param Person $person
*/
function doSomething($person) {
$person->getAge() // now with code-completition
...
}
Некоторые ответы на вопросы: