Тип PHPDoc намекает на массив объектов? - PullRequest
388 голосов
/ 22 апреля 2009

Итак, в PHPDoc можно указать @var над объявлением переменной-члена, чтобы намекнуть на его тип. Тогда IDE, например. PHPEd будет знать, с каким типом объекта он работает, и сможет обеспечить понимание кода для этой переменной.

<?php
  class Test
  {
    /** @var SomeObj */
    private $someObjInstance;
  }
?>

Это прекрасно работает, пока мне не понадобится сделать то же самое с массивом объектов, чтобы иметь возможность получить правильный совет, когда я буду повторять эти объекты позже.

Итак, есть ли способ объявить тег PHPDoc, чтобы указать, что переменная-член является массивом SomeObj s? @var массива недостаточно, и, например, @var array(SomeObj) кажется недействительным.

Ответы [ 13 ]

2 голосов
/ 23 апреля 2009

Проблема в том, что @var может просто обозначать один тип - не содержать сложной формулы. Если у вас был синтаксис «array of Foo», зачем останавливаться на достигнутом и не добавлять синтаксис «array of array, который содержит 2 Foo и три Bar»? Я понимаю, что список элементов, возможно, более общий, чем этот, но это скользкий уклон.

Лично я иногда использовал @var Foo[] для обозначения "массива Foo", но он не поддерживается IDE.

1 голос
/ 28 июня 2010
<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
    <?php
    // Type hinting now works:
    $model->getImage();
    ?>
<?php endforeach; ?>
0 голосов
/ 13 января 2010

Я нашел что-то, что работает, оно может спасти жизни!

private $userList = array();
$userList = User::fetchAll(); // now $userList is an array of User objects
foreach ($userList as $user) {
   $user instanceof User;
   echo $user->getName();
}
...