3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Test { public $testdata = []; public function __construct(&$inputdata) { $this->testdata =& $inputdata; } public function &getIterator() { foreach ($this->testdata as $ikey => &$ivalue) { yield $ikey => $ivalue; } } } $data = array("one" => "Curly", "two" => "Larry", "three" => "Moe"); $t = new Test($data); foreach ($t->getIterator() as $tkey => &$tvalue) { // $tvalue -> $ivalue -> $t->testdata -> $inputdata -> $data // break any reference in that chain and the line below will not work $tvalue = strtoupper($tvalue); } foreach ($data as $dkey => $dvalue) { printf("%s: %s\n", $dkey, $dvalue); }
Output for 5.6.38, 7.0.0 - 7.0.33, 7.1.0 - 7.1.25, 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, 8.4.1 - 8.4.12
one: CURLY two: LARRY three: MOE

preferences:
132.44 ms | 408 KiB | 5 Q