генератор — ключевое слово PHP Yield — итерация цикла

Я использую генератор 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

Решение

Проблема заключается в =+ операция, вы, вероятно, хотели напечатать +=что бы сделать свое дело:

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

Другие решения

$i =+ $ctr

=+ не оператор. Это по существу сделает $i = $ctr,

Первый раз, когда происходит цикл $i установлен в $ctrв данном случае это 2. После этого оно постоянно устанавливается на 2 и никогда не поднимается выше. Отсюда и бесконечный цикл. использование += вместо.

1

По вопросам рекламы [email protected]