Глоссарий

Генераторы (yield)

Генератор — функция, возвращающая значения по одному с помощью yield, не загружая весь результат в память. Идеален для обработки больших наборов данных: CSV-файлов, результатов БД, бесконечных последовательностей.

Пример

function csvReader(string $file): Generator {
  $fh = fopen($file, 'r');
  while (!feof($fh)) {
    yield fgetcsv($fh);
  }
  fclose($fh);
}

foreach (csvReader('million_rows.csv') as $row) {
  process($row); // только одна строка в памяти
}

Преимущества перед массивами

Массив из миллионов строк займёт сотни MB. Генератор — O(1) памяти независимо от объёма. Выполнение ленивое: следующее значение вычисляется только при запросе.

yield from

yield from делегирует выполнение другому генератору или итерируемому объекту — полезно для композиции генераторов.