Generator
Объект, который возвращает функция с `yield`.
Синтаксис
function name(): Generator { yield $value; }Возвращаемое значение
GeneratorОбъект для перебора в `foreach` с методами `current()`, `next()`, `send()`, `getReturn()`.
Примеры
Значения вычисляются по одному:
<?php
function countdown(int $from): Generator
{
while ($from > 0) {
yield $from--;
}
}
foreach (countdown(3) as $number) {
echo $number, ' ';
}Результат:
3 2 1Значение return после перебора:
<?php
function sumOf(array $numbers): Generator
{
$sum = 0;
foreach ($numbers as $n) {
$sum += $n;
yield $n;
}
return $sum;
}
$generator = sumOf([1, 2, 3]);
foreach ($generator as $n) {}
echo $generator->getReturn();Результат:
6Примечания
Генератор можно перебрать только один раз: повторный foreach вызовет исключение. Для нового перебора вызовите функцию снова.
См. также
- iterator_to_array — Превращает итератор или генератор в массив.
- range — Создаёт массив с последовательностью значений.
- Closure — Класс анонимных функций и замыканий.
Вопросы и ответы по теме
В учебнике
- Генераторы — Генераторы в PHP — ключевое слово yield, экономия памяти, ключи, бесконечные последовательности и чтение больших файлов.