PHP 生成器返回类型

Posted

技术标签:

【中文标题】PHP 生成器返回类型【英文标题】:PHP generator return type 【发布时间】:2019-07-03 08:52:21 【问题描述】:

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

在 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】:

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

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

【讨论】:

推荐Generator 优于iterable?这是我真正希望得到答案的问题 @rink.attendant.6 不,Generator 是更准确的数据类型,iterable 更宽,因为您还可以使用IteratorGeneratorTraversable 作为返回输入 如果你希望你的界面同时支持ArrayIteratorGenerator,你应该使用iterable。最好是Interface

以上是关于PHP 生成器返回类型的主要内容,如果未能解决你的问题,请参考以下文章

PHP之生成器

php中如何生成1-15之间的随机数?

如何使用 PHP 为 MySQL DATETIME 类型生成日期?

如何使用PHP的生成器yield处理大量数据业务

如何从自我生成返回类型提示?

laravel框架加载流程