Как работает генератор? Что такое send() и return()?

Ответ
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 после завершения генератора.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.