Глосарій

Генератори (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 делегує виконання іншому генератору або ітерованому об'єкту — корисно для композиції генераторів.