PHP Yield关键字循环迭代


PHP Yield keyword - loop iteration

我使用的是PHP生成器,无法解释这种行为。这是我试过的代码

<!-- language: PHP -->
<?php
function myfun($num1, $num2, $ctr = 1) {
    for ($i = $num1; $i <= $num2; $i =+ $ctr) {
        yield $i;
    }
}
echo 'Odd numbers: ';
foreach(myfun(1, 7, 2) as $num) {echo $num;};
?>

有人能解释一下我使用PHP yield进入无限循环的这种行为吗?

结果:奇数:122222222222222222…………

注意:$i+=$ctr按预期工作

结果:奇数:1357

问题出在=+操作中,您可能想键入+=,这样就可以完成任务:

<?php
function myfun($num1, $num2, $ctr = 1) {
    for ($i = $num1; $i <= $num2; $i += $ctr) {
        yield $i;
    }
}
echo 'Odd numbers: ';
foreach(myfun(1, 7, 2) as $num) {echo $num;};

结果:Odd numbers: 1357

$i =+ $ctr

=+不是运算符。这基本上将执行$i = $ctr

循环第一次发生时,$i被设置为$ctr,在这种情况下为2。在这之后,它被连续地设置为2并且永远不会变高。因此产生了无限循环。请改用+=