Что такое генератор в PHP?
17 апреля 2018Чем являются генераторы
Генераторы это простые итераторы, которые поддерживает перемещение только вперед на 1 шаг. Они вычисляют и выдают значения по требованию. Генераторы сохраняют свое внутреннее состояние на момент выдачи значения и восстанавливают его при запросе следующего значения.
Создание генератора
Простой пример определения и использования генератора:
function myFirstGenerator()
{
yield 'one';
yield 'two';
yield 'three';
yield 'four';
yield 'five';
}
foreach (myFirstGenerator() as $value) {
echo $value . PHP_EOL;
}
Результат выполнения кода:
one
two
three
four
five
Использование генератора
Генераторы полезны для перебора больших наборов данных при экономии оперативной памяти.
Представим, что у нас есть задача прочитать построчно файл размером 4 Гб, а скрипту PHP доступно только 100 Мб оперативной памяти. При использовании генераторов нет необходимости размещать весь файл в памяти - память используется для размещения только 1 строки.
function readFile($filename = '')
{
$res = fopen($filename, 'r');
while(feof($res) === false) {
yield fgets($res);
}
fclose($res);
}
foreach (readFile('test.txt') as $row) {
// Do something with $row
}
Источники:
Josh Lockhart "Modern PHP"