【发布时间】:2015-06-21 00:17:04
【问题描述】:
我知道不用生成器就可以非常容易地归档,但是我想更好地了解生成器。因此,请不要建议使用其他东西。
我有一个生成屏幕截图文件名的类(硒):
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 循环不同的上下文中使用生成器吗?
【问题讨论】:
-
这篇文章解释得非常详细:stackoverflow.com/questions/17483806/…
-
您需要使用
iterator()->current()来获取值,并使用iterator()->next()来增加它。两步过程。