Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник PHP

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, экономия памяти, ключи, бесконечные последовательности и чтение больших файлов.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.