我正在使用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
答案 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并且永远不会变高。因此无限循环。请改用+=
。