<?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();
- Output for 8.4.1 - 8.4.12
- array(6) {
[0]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
[1]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(4)
["c"]=>
int(9)
}
["returned"]=>
NULL
}
[2]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(4)
["c"]=>
int(9)
}
["returned"]=>
NULL
}
[3]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
[4]=>
array(2) {
["yielded"]=>
array(0) {
}
["returned"]=>
object(Generator)#4 (1) {
["function"]=>
string(19) "test::firstIterator"
}
}
[5]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
}
- Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25
- array(6) {
[0]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
[1]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(4)
["c"]=>
int(9)
}
["returned"]=>
NULL
}
[2]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(4)
["c"]=>
int(9)
}
["returned"]=>
NULL
}
[3]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
[4]=>
array(2) {
["yielded"]=>
array(0) {
}
["returned"]=>
object(Generator)#4 (0) {
}
}
[5]=>
array(2) {
["yielded"]=>
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
["returned"]=>
NULL
}
}
preferences:
142.98 ms | 412 KiB | 5 Q