PHP 8ПровереноПрактика

Генераторы PHP — ленивое получение значений через yield

Генератор создаёт Traversable-последовательность и приостанавливает функцию на yield, не собирая весь результат в массив.

function rows(iterable $source): Generator

Минимальный пример

<?php
function numbers(int $last): Generator {
    for ($i = 1; $i <= $last; $i++) {
        yield $i;
    }
}

Память

Преимущество появляется, когда источник тоже читается порциями, а потребитель не складывает всё обратно в массив. iterator_to_array() отменяет ленивость результата.

Ключи и значения

yield принимает ключ через `yield $key => $value`. Повторяющиеся ключи разрешены во время итерации, но потеряются при преобразовании в обычный массив.

Очистка ресурсов

Файл или курсор закрывайте через try/finally внутри генератора. Потребитель может остановить итерацию раньше, поэтому путь досрочного завершения важен.

Когда не нужен

Для десятка значений массив проще. Генератор полезен для потенциально больших потоков и композиции итераторов, а не как декоративная замена foreach.

Связанные материалы

Источники и проверка

  • PHP Documentation Group — структурный источник, без внешней ссылки

Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie