Внезапно до меня дошло как записать эту вещь в 1 строчку

foreach(call_user_func(function () {for ($i = 0; $i < 10; $i++) yield $i;}) as $i) echo $i;

Т.е. имеем такой синтаксис для "одноразовых" генераторов

$generator = call_user_func(function () {
while(1) {
yield generate_something();
}
});