我有这个代码:
<?php
function generator() {
yield 'First value';
for ($i = 1; $i <= 3; $i++) {
yield $i;
}
}
$gen = generator();
$first = $gen->current();
echo $first . '<br/>';
//$gen->next();
foreach ($gen as $value) {
echo $value . '<br/>';
}
这个输出:
First value
First value
1
2
3
我需要'第一个值'来只产生一次。如果我取消注释 $gen->next() 行,则会发生 fatal error :
fatal error :未捕获异常“Exception”,消息为“无法倒回已经运行的生成器”
我该如何解决这个问题?
最佳答案
问题是 foreach
try to reset (倒带)发电机。但是rewind()
如果生成器当前在第一次 yield 之后,则抛出异常。
所以你应该避免使用 foreach
并使用 while
代替
$gen = generator();
$first = $gen->current();
echo $first . '<br/>';
$gen->next();
while ($gen->valid()) {
echo $gen->current() . '<br/>';
$gen->next();
}
关于PHP 生成器产生第一个值,然后遍历其余值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425851/