У меня не получилось найти примера как сделать анонимный генератор в PHP, в итоге разобрался сам.

У меня не получилось найти примера как сделать анонимный генератор в PHP, в итоге разобрался сам.

$generator = function()
{
    yield 1;
    yield 2;
}

foreach($generator as $item)
{
    echo $item;
}

На первый взгляд, этот пример должен работать, но он не работает. Ошибок никаких не выдается, но и результата тоже нет.

Чтобы генератор из анонимной функции заработал, её надо выполнить:

$generator = $generator();

После этого объект типа Closure превращается в объект типа Generator, и его можно использовать в цикле.

$closure = function()
{
    yield 1;
    yield 2;
}

$generator = $closure();

foreach($generator as $item)
{
    echo $item;
}

27.01.2020