PHP 生成器产生第一个值,然后遍历其余值

标签 php generator yield

我有这个代码:

<?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/

相关文章:

php - 如何使用 javascript 或 jquery 从 html 5 中的输入类型文件中获取文件名

php - 无法创建 Heroku 数据剪辑

python - 用类模拟产量

javascript - Go channel 与 JavaScript 生成器有何不同?

c# - 在 C# 中生成返回查找列表或预加载静态列表更好吗?

c# - 这个带有 "yield"的函数如何详细工作?

php - 用户主动检查

php - 如何使用它的 id 从数据库中调用 HTML 代码

python - 在 python 增强生成器中避免 "exception ignored"

php - PHP 中单个循环中的多个生成器