- var_dump: documentation ( source)
- iterator_to_array: documentation ( source)
<?php
function generator_to_array(\Generator $generator) {
$yielded = iterator_to_array($generator);
return [
'yielded' => $yielded,
'returned' => $generator->getReturn(),
];
}
class test
{
private $whatever = false;
public function __construct()
{
$a = generator_to_array($this->firstIterator());
$b = generator_to_array($this->secondIterator($this->firstIterator()));
$c = generator_to_array($this->thirdIterator($this->firstIterator()));
$this->whatever = true;
$d = generator_to_array($this->firstIterator());
$e = generator_to_array($this->secondIterator($this->firstIterator()));
$f = generator_to_array($this->thirdIterator($this->firstIterator()));
var_dump([$a, $b, $c, $d, $e, $f]);
}
public function firstIterator(): \Iterator
{
yield 'a'=> 1;
yield 'b'=> 2;
yield 'c'=> 3;
}
public function secondIterator(\Iterator $first): \Iterator
{
if ($this->whatever === true)
{
return $first;
}
foreach($first as $key=>$value)
{
yield $key => $value * $value;
}
}
public function thirdIterator(\Iterator $first): \Iterator
{
if ($this->whatever === true)
{
return $first;
}
return $this->thirdSubIterator($first);
}
public function thirdSubIterator(\Iterator $first): \Iterator
{
foreach($first as $key=>$value)
{
yield $key => $value * $value;
}
}
}
new test();