具体细节信息
\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
一样)
答案 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.
}