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

时间:2014-12-03 18:32:05

标签: php phpdoc

具体细节信息

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

问题

如何暗示Foo是可迭代的,只包含Bar项?当然,提示应该保留信息,它是Foo

的实例

到目前为止我尝试了什么

如果我们有一组Bar个实例,那么这很简单(例如,在this问题中已经描述过):Bar[]。此外,如果打算迭代Foo,它仍然可以通过以下方式解决(或多或少):

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

/* @var $object Bar */
foreach ($foo as $object) {
}

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

1 个答案:

答案 0 :(得分:4)

如果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.
}