PHP 生成器返回类型

rin*_*t.6 8 php iterator iterable generator php-generators

我以前从未在 PHP 中使用过生成器,文档中也没有显示返回类型声明的示例。

在 PhpStorm 中,执行此操作时 IDE 中出现错误:

public function getDataIncrementally(): void {
    yield from [/* some large set of numbers*/];
}
Run Code Online (Sandbox Code Playgroud)

错误是:

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

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

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

Pet*_*kyi 6

您的返回类型是Generator,但您正在使用void. 请尝试以下操作:

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

  • 是否推荐使用“Generator”而不是“iterable”?这就是我真正希望得到答案的问题 (3认同)
  • 如果您希望您的接口同时支持“Array”、“Iterator”和“Generator”,您应该使用“iterable”。最好是“Interface”。 (2认同)