我以前从未在 PHP 中使用过生成器,并且文档中没有展示返回类型声明的示例。
在 PhpStorm 中,当我这样做时,IDE 会出现错误:
在 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
作为返回类型声明是否合适?
Generator
是更准确的数据类型,iterable
更广泛,因为你还可以使用Iterator
、Generator
、Traversable
作为返回类型。 - Petro ChaikivskyiArray
、Iterator
和Generator
,那么您应该使用iterable
。这对于Interface
来说是更可取的。 - Dmitry Balabka