> Для чего нужны генераторы в PHP (PHP)

Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы

Компании: vanta

Стек: PHP

> Пример ответа

Генераторы в PHP (ключевое слово yield) нужны для создания итераторов без написания полноценного класса, реализующего интерфейс Iterator. Основные сценарии использования:

  1. Экономия памяти при работе с большими наборами данных
    Вместо загрузки всего массива в память (например, при чтении огромного CSV-файла или обработке результатов БД), генератор возвращает значения по одному. Это позволяет обрабатывать данные, которые не помещаются в RAM.

  2. Реализация ленивых вычислений
    Значения вычисляются только в момент запроса (при каждой итерации foreach). Это полезно для бесконечных последовательностей (например, чисел Фибоначчи) или данных, получение которых требует времени (запросы к API).

  3. Упрощение кода для сложных итераций
    Генератор сохраняет своё состояние между вызовами, что позволяет писать логику с паузами (например, постраничная навигация) без внешних переменных.

  4. Передача управления (cooperative multitasking)
    В связке с yield и корутинами можно реализовать асинхронное выполнение задач (например, в библиотеке ReactPHP), где генератор приостанавливается и возобновляется по событию.

Пример: чтение большого файла построчно без загрузки в память:

PHP
function readLines($file) {
$handle = fopen($file, 'r');
while (!feof($handle)) {
yield fgets($handle);
}
fclose($handle);
}
foreach (readLines('huge.log') as $line) {
// обрабатываем одну строку
}

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью