gpt4 book ai didi

PHP 5.6 生成器语法 : Can generators only be used in foreach loops?

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:43 27 4
gpt4 key购买 nike

我知道这可以在没有生成器的情况下非常容易地实现,但是我想更好地理解生成器。因此,请不要建议使用其他东西。


我有一个生成屏幕截图文件名的类 (selenium):

class ScreenshotName
{

private $counter = 0;

public function screenshotNameIterator()
{
while(true) {
yield sprintf("screenshot-%s-%s.png", date("Y-m-d\\TH:i:s"), ++$this->counter);
}
}
}

现在我的问题是:我可以在 foreach 循环之外的任何其他上下文中使用这样的生成器吗?例如

(new ScreenshotName())->screenshotNameIterator()->next()

对我来说,这总是返回 null,如果我调试,它永远不会进入生成器方法。 PHP 文档也没有真正提到这一点。

所以我的问题是:是否有记录的方法可以在与 for 循环不同的上下文中使用生成器?

最佳答案

有一个记录的方法可以做到这一点。事实上,Generator 确实实现了迭代器接口(interface),正如您在 page 上看到的那样.

事实上 foreach 关键字只对迭代器起作用。因此,如果您可以在生成器上使用 foreach,那么您必须能够调用 next

这是一个使用 next 而不是 foreach 的示例代码:

<?php

function evenNumbers() {
for ($i = 0;; $i++) {
yield 2*$i;
}
}

$gen = evenNumbers();
$gen->next();
echo $gen->current();

?>

关于PHP 5.6 生成器语法 : Can generators only be used in foreach loops?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com