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 делегирует выполнение другому генератору или итерируемому объекту — полезно для композиции генераторов.