PHP Yield关键字 - 循环迭代

时间:2014-10-13 14:05:03

标签: php generator yield post-increment

我正在使用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解释我这种行为,进入无限循环吗?

结果:奇数:122222222222222222222222222222222 ...............

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

结果:奇数:1357

2 个答案:

答案 0 :(得分:1)

问题在于=+操作,您可能打算键入+=,这样可以解决问题:

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

答案 1 :(得分:1)

$i =+ $ctr

=+不是运营商。这基本上会$i = $ctr

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