PHP生成器返回类型

13
我以前从未在 PHP 中使用过生成器,并且文档中没有展示返回类型声明的示例。
在 PhpStorm 中,当我这样做时,IDE 会出现错误:
public function getDataIncrementally(): void {
    yield from [/* some large set of numbers*/];
}

错误如下:

生成器只能声明 Generator、Iterator 或 Traversable、iterable 返回类型,不允许使用 void。

我可以看到继承树为 Traversable -> Iterator -> Generator。同时,iterable 是 PHP 7.1 中引入的新伪类型。

如果我只需要支持 PHP >= 7.1,那么使用 iterable 作为返回类型声明是否合适?

1个回答

12

你的返回类型是Generator,但你正在使用void。尝试以下方法:

您的返回类型应该匹配您生成器函数的类型。

public function getDataIncrementally(): \Generator {
    yield from [/* some large set of numbers*/];
}

2
“Generator”比“iterable”更推荐吗?这是我真正希望得到答案的问题。 - rink.attendant.6
@rink.attendant.6 不是的,Generator 是更准确的数据类型,iterable 更广泛,因为你还可以使用 IteratorGeneratorTraversable 作为返回类型。 - Petro Chaikivskyi
2
如果您希望您的接口同时支持ArrayIteratorGenerator,那么您应该使用iterable。这对于Interface来说是更可取的。 - Dmitry Balabka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接