конкретика
Foo
который реализует \Iterator
интерфейс, и мы знаем, что все элементы внутри этого итератора будут экземпляром класса Bar
, Вопрос
Как намекнуть это Foo
повторяется и содержит только элементы Bar
? Конечно, намек должен содержать информацию, что это экземпляр Foo
Что я пробовал до сих пор
Если бы у нас был массив Bar
случаи, то это легко (это описано, например, в этот вопрос): Bar[]
, Кроме того, если намерение состоит в том, чтобы перебрать Foo
, он все еще может быть решен (более или менее) с помощью:
//assume that $foo is instance of Foo
//..
/* @var $object Bar */
foreach ($foo as $object) {
}
Однако есть одна очень важная вещь, которая недостижима с подсказками на месте: тип возврата. Если у меня будет какой-то метод, который должен вернуть Foo
Знаю только как намекнуть что Foo
, но пользователь этой функции все равно не сможет показать, что она на самом деле итеративная и содержит Bar
экземпляры (как было бы, если я укажу @return Bar[]
в случае с массивом Bar
экземпляры)
Если Foo
инвентарь Iterator
тогда вы можете указать тип возврата Foo::current()
, PHPStorm узнает что Foo::current()
Возвращает значение, когда вы foreach
над Foo
,
Например:
<?php
class Foo implements Iterator
{
// ...
/**
* @return Bar
*/
public function current()
{
// ...
}
// ...
}
$foo = new Foo();
foreach ($foo as $object) {
// PHPStorm will recognise $object is type Bar.
}
Других решений пока нет …