Подсказка итератора сущностей строгого типа в PHPDoc

конкретика

  • Я использую PHPStorm 8 IDE.
  • Давайте предположим, что у нас есть некоторый класс 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 экземпляры)

5

Решение

Если 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.
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]