Я использую генератор 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
Проблема заключается в =+
операция, вы, вероятно, хотели напечатать +=
что бы сделать свое дело:
<?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 и никогда не поднимается выше. Отсюда и бесконечный цикл. использование +=
вместо.