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

Alm*_* Do 5 php phpdoc

细节

  • 我正在使用PHPStorm 8 IDE.
  • 假设我们有一些Foo实现\Iterator接口的类,我们知道迭代器中的所有项都是class的实例Bar.

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

到目前为止我尝试了什么

如果我们有一个数组Bar的情况下,那么这是一件容易的事情(它的描述,例如,在这个问题)Bar[].此外,如果意图是迭代Foo,它仍然可以解决(或多或少):

//assume that $foo is instance of Foo
//..

/* @var $object Bar */
foreach ($foo as $object) {
}
Run Code Online (Sandbox Code Playgroud)

但是,有一个非常重要的事情是使用就地提示无法实现的:返回类型.如果我有一些应该返回的方法Foo,我只知道如何提示Foo,但该函数的用户仍然无法公开,它实际上是可迭代的并且包含Bar实例(就像我指定的那样)@return Bar[]如果是Bar实例数组)

Cou*_*les 4

如果Foo实现了Iterator,那么你可以提示返回类型Foo::current()。PHPStorm 会识别出返回的是当你结束Foo::current()时的值。foreachFoo

例如:

<?php

class Foo implements Iterator
{
    // ...

    /**
     * @return Bar
     */
    public function current()
    {
        // ...
    }

    // ...
}

$foo = new Foo();

foreach ($foo as $object) {
    // PHPStorm will recognise $object is type Bar.
}
Run Code Online (Sandbox Code Playgroud)