function accumulator(): Generator {
$sum = 0;
while (true) {
$value = yield $sum; // yield возвращает и принимает значения
if ($value === null) break;
$sum += $value;
}
return $sum; // финальное значение
}
$gen = accumulator();
$gen->current(); // 0 (первый yield)
$gen->send(10); // отправляет 10, получает 10
$gen->send(20); // отправляет 20, получает 30
$gen->send(null); // завершает цикл
echo $gen->getReturn(); // 30 (значение из return)send() передает значение в генератор (становится результатом yield). getReturn() получает значение из return после завершения генератора.