Из Thread API приведен полный список:
Use:
/* @var $objs Test[] */
foreach ($objs as $obj) {
// Typehinting will occur after typing $obj->
}
when typehinting inline variables, and
class A {
/** @var Test[] */
private $items;
}
for class properties.
Previous answer from '09 when PHPDoc (and IDEs like Zend Studio and Netbeans) didn't have that option:
The best you can do is say,
foreach ($Objs as $Obj)
{
/* @var $Obj Test */
// You should be able to get hinting after the preceding line if you type $Obj->
}
I do that a lot in Zend Studio. Don't know about other editors, but it ought to work.
Проблема в том, что @var
может просто обозначать один тип - Не содержать сложной формулы. Если у вас был синтаксис «array of Foo», зачем останавливаться на достигнутом и не добавлять синтаксис для «array of array, который содержит 2 Foo и три Bar»? Я понимаю, что список элементов, возможно, более общий, чем этот, но это скользкий уклон.
Лично я иногда использовал @var Foo []
для обозначения «массива Фу», но это не поддерживается IDE.
В IDE PhpStorm от JetBrains вы можете использовать / ** @var SomeObj [] * /
, например:
/**
* @return SomeObj[]
*/
function getSomeObjects() {...}
Документация phpdoc рекомендует этот метод:
указано, что содержит единственный тип, определение типа информирует читателя о типе каждого элемента массива. Тогда ожидается, что в качестве элемента для данного массива будет только один Тип.
Пример:
@return int []
Я нашел что-то, что работает, он может спасти жизни!
private $userList = array();
$userList = User::fetchAll(); // now $userList is an array of User objects
foreach ($userList as $user) {
$user instanceof User;
echo $user->getName();
}
<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
<?php
// Type hinting now works:
$model->getImage();
?>
<?php endforeach; ?>