Для чего нужны Генераторы (yield) в php?
парсим большие csv<?php
function getRows($file) {
    $handle = fopen($file, 'rb');
    if ($handle === false) {
        throw new Exception();
    }
    while (feof($handle) === false) {
        yield fgetcsv($handle);
    }
    fclose($handle);
}

foreach (getRows('data.csv') as $row) {
     print_r($row);
}
Благодаря использованию генератора сохраняется состояние функции. Следующая итерация начинается с места окончания с теми же переменными с которыми завершилась предыдущая.
По ссылке пример кода и сразу же результат выполнения(а так же информация что будет если использовать return в генераторе) blog.ivru.net/?id=145