我使用的是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并且永远不会变高。因此产生了无限循环。请改用+=
。