Как работают PHP-подпрограммы / генераторы

Я нашел этот пример PHP рутины.

https://gnugat.github.io/2014/04/30/php-generators-and-coroutines.html

function holy_grail_countdown($number)
{
while (0 < $number) {
$reset = (yield $number);
$number = $reset ?: $number - 1;
}
}

$c = holy_grail_countdown(5);
foreach ($c as $number) {
echo "$number\n"; // outputs 5, then 2 and finally 1.
if (5 === $number) {
$c->send(3);
}
}

Я до сих пор не понимаю, почему это работает. Почему не выводятся 5, 3, 2, 1?

Отправляет значение 3 в выражения ((yield $number)), но, похоже, он выполняет 2 итерации.

# 1st iteration
$reset = (yield $number); # reset=3
$number = $reset ?: $number - 1; = #number=3
# 2nd iteration
$reset = (yield $number); # reset=null
$number = $reset ?: $number - 1; = #number=3-1=>2

Почему есть вторая итерация с reset=null?

Спасибо.

0

Решение

Задача ещё не решена.

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

Других решений пока нет …