Тип PHPDoc намекает на массив объектов?

Из Thread API приведен полный список:

  • Если метод run () возвращается.
  • Если исключение
  • Если это поток демона, и все потоки не-демона «умерли»
  • Если был выведен метод exit класса Runtime (даже в другом потоке).

390
задан Artem Russakovskii 18 September 2011 в 17:42
поделиться

5 ответов

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.

313
ответ дан 22 November 2019 в 23:40
поделиться

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

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

2
ответ дан 22 November 2019 в 23:40
поделиться

В IDE PhpStorm от JetBrains вы можете использовать / ** @var SomeObj [] * / , например:

/**
 * @return SomeObj[]
 */
function getSomeObjects() {...}

Документация phpdoc рекомендует этот метод:

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

Пример: @return int []

887
ответ дан 22 November 2019 в 23:40
поделиться

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

private $userList = array();
$userList = User::fetchAll(); // now $userList is an array of User objects
foreach ($userList as $user) {
   $user instanceof User;
   echo $user->getName();
}
-5
ответ дан 22 November 2019 в 23:40
поделиться
<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
    <?php
    // Type hinting now works:
    $model->getImage();
    ?>
<?php endforeach; ?>
1
ответ дан 22 November 2019 в 23:40
поделиться