3v4l.org

run code in 500+ PHP versions simultaneously
<?php function from() { yield 'a' => 1; yield 'b' => 2; echo "--from return END--\n"; return 'END'; } function gen($from) { var_dump(yield from $from); } $from = from(); $g1 = gen($from); $g2 = gen($from); echo "g1: expect a => 1\n"; var_dump($g1->key()); // $from yield a => 1 var_dump($g1->current()); $g1->next(); // $from yield b => 2 echo "g2: expect b => 2\n"; var_dump($g2->key()); var_dump($g2->current()); echo "expect from return END, gen var_dump(END)\n"; $g2->next(); // $from return END, gen() var_dump, $g2 closed echo "g1: expect gen() var_dump(END), then NULL => NULL, actually no var_dump, NULL => 2\n"; var_dump($g1->key()); // $from already closed, expect gen() var_dump, $g1 closed var_dump($g1->current());
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.34, 8.3.0 - 8.3.35, 8.4.1 - 8.4.26, 8.5.0 - 8.5.11
g1: expect a => 1 string(1) "a" int(1) g2: expect b => 2 string(1) "b" int(2) expect from return END, gen var_dump(END) --from return END-- string(3) "END" g1: expect gen() var_dump(END), then NULL => NULL, actually no var_dump, NULL => 2 NULL int(2)

preferences:
27.47 ms | 1497 KiB | 7 Q