Generator

<?php

/**
 * Yielding test values.
 *
 * @param  void
 * @return void
 */
function foo()
{
    for ($i = 0; $i < 10; $i++) {
        yield $i;
    }
}

/**
 * Receive a value.
 *
 * @param  void
 * @return void
 */
function bar()
{
    while (true) {
        var_dump(yield);
    }
}

/**
 * Yielding test values and Receive a value.
 *
 * @param  void
 * @return void
 */
function baz()
{
    $i = 0;
    while (true) {
        var_dump(yield $i++);
    }
}

$foo = foo();
foreach ($foo as $value) {
    var_dump($value);
}
// int(0)
// int(1)
// int(2)
// int(3)
// int(4)
// int(5)
// int(6)
// int(7)
// int(8)
// int(9)

$bar = bar();
$bar->send('bar');         // string(3) "bar"

$baz = baz();
$baz->rewind();
$baz->send('baz');         // string(3) "baz"
var_dump($baz->current()); // int(1)
var_dump($baz->key());     // int(1)
$baz->next();              // NULL
var_dump($baz->current()); // int(2)
var_dump($baz->valid());   // bool(true)

results matching ""

    No results matching ""