Generator::getReturn

(PHP 7)

Generator::getReturnGet the return value of a generator

Описание

public mixed Generator::getReturn ( void )

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Returns the generator's return value once it has finished executing.

Примеры

Пример #1 Generator::getReturn() example

<?php

$gen 
= (function() {
    
yield 1;
    
yield 2;

    return 
3;
})();

foreach (
$gen as $val) {
    echo 
$valPHP_EOL;
}

echo 
$gen->getReturn(), PHP_EOL;

Результат выполнения данного примера:

1
2
3

Коментарии

The note by jm at guide42 dot com is inaccurate. Generator::getReturn() does not check the existence of the return statement, but rather whether the function has returned (finished executing).

<?php
function f(){
  yield;
}

f()->getReturn(); // Exception: Cannot get return value of a generator that hasn't returned

$f f();
$f->next(); // NULL
$f->getReturn(); // NULL, because having no return statement implies an empty `return;`, and the void return value is resolved to null.
2017-07-28 12:24:52
http://php5.kiev.ua/manual/ru/generator.getreturn.html
I'm not quite sure -- I feel there is an ambiguity issue here with returning a value inside a generator and ->getReturn() method of such generator as I have been able to return an array of sorts, something like this:

function dequeue(){
try{
  foreach($this->buffer->data as $data){ ... }
}
  return $statistics;
}

foreach(($generator = $this->dequeue()) as $bdata){
.....
}

if($statistics = $generator->getReturn()){
 // generator returns $statistics
}

Obviously this is not a complete example, but $statistics does become available with the returned array.
2017-10-06 02:18:37
http://php5.kiev.ua/manual/ru/generator.getreturn.html
Автор:
Just to be clear, the value returned by a generator is not yielded while it is running, but is available afterwards through the getReturn() method.

One use for this could be to record the output of a generator so that it can be iterated over again without having to reconstruct and re-run the generator. (Indeed, one could write a generator that simply does exactly this for any given iterable.)

<?php
function generate_squares($n)
{
   
$record = [];
    for(
$i 0$i <= $n; ++$i)
    {
        yield (
$record[] = $i $i);
    }
    return 
$record;
}

$squares generate_squares(10);
foreach(
$squares as $s)
{
    echo 
$s' ';
}
$recorded $squares->getReturn();
echo 
"\nThat's ["join(', '$recorded), "]";
?>

Recording keys as well would take a bit more work, as generators are free to repeat them but arrays aren't.
2018-11-01 01:58:31
http://php5.kiev.ua/manual/ru/generator.getreturn.html

    Поддержать сайт на родительском проекте КГБ