Как упоминалось в комментариях, и после небольшого дополнительного исследования, я вполне уверен, что то, о чем вы спрашиваете, невозможно:
Давайте сначала попробуем резюмировать, как работают генераторы:
- Когда функция содержит хотя бы одно выражение
yield
, она становится функцией генератора, которая возвращает экземпляр Generator
. - Выражение
yield
в основном выполняет следующие функции: - сначала он обновляет текущее значение генератора своим значением (значение сразу после
yield
или null
, если его нет), - затем он ждет, пока не будет вызван
Generator::send
на генераторе (Generator::next()
, который вызывается при итерации по генератору, в точности совпадает с Generator::send(null)
), - когда он получает значение через
Generator::send
, он делает выражение yield
оценить все, что было передано в качестве параметра, - , только тогда функция может возобновить свое выполнение (возможно, до следующего выражения
yield
).
Итак, пишете ли вы:
yield; // same as `yield null;`
или
yield 'some value';
или
$result = yield;
или
$result = yield 'some value';
Конечный результат тот же, значение yield
просто оценивает к параметру Generator::send
. Независимо от того, используете ли вы результат выражения, это ничего не меняет с точки зрения генератора.
Другими словами, это в основном похоже на попытку узнать, возвращается ли возвращаемое значение вызова функции или логическое выражение, было сохранено в переменной или немедленно отброшено.