Статья
Что такое генератор в PHP?

Что такое генератор в PHP?

14 апреля 2017

Чем являются генераторы

Генераторы это простые итераторы, которые поддерживает перемещение только вперед на 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"