PHPDoc 中严格类型实体的提示迭代器


Hint iterator of strict type entities in PHPDoc

>Specifics

  • 我正在使用PHPStorm 8 IDE。
  • 假设我们有一些实现'Iterator接口的类Foo,并且我们知道该迭代器中的所有项目都将是类Bar的实例。

问题

如何提示Foo是可迭代的并且仅包含Bar项?当然,提示应该保留信息,它是Foo的实例

到目前为止我尝试过什么

如果我们有一个Bar实例的数组,那么这是一件简单的事情(例如,在这个问题中进行了描述(:Bar[] .此外,如果意图是遍历Foo,它仍然可以(或多或少(通过以下方式解决:

//assume that $foo is instance of Foo
//..
/* @var $object Bar */
foreach ($foo as $object) {
}

但是,有一件非常重要的事情是就地提示无法实现的:返回类型。如果我有一些应该返回Foo的方法,我只知道如何暗示该Foo,但该函数的用户仍然无法公开,它实际上是可迭代的并且包含Bar实例(就像我在Bar实例数组的情况下指定@return 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.
}