Генератор - функция, которая возвращает значения по одному через yield:
function fibonacci(): Generator {
$a = 0; $b = 1;
while (true) {
yield $a;
[$a, $b] = [$b, $a + $b];
}
}
foreach (fibonacci() as $num) {
if ($num > 100) break;
echo "$num "; // 0 1 1 2 3 5 8 13 21 34 55 89
}
// yield from - делегирование
function merged(): Generator {
yield from [1, 2, 3];
yield from range(4, 6);
}Генератор - ленивый: вычисляет следующее значение только по запросу. Не загружает все данные в память.