3v4l.org

run code in 300+ PHP versions simultaneously
<?php function yieldAnything(): Generator { try { yield 42; } finally { echo "finally in yieldSomething()\n"; } } function iteratorConsumer(): void { $iterator = yieldAnything(); $iterator->current(); // to trigger the yield throw new RuntimeException("any-exception-here-or-in-any-child-call-before-yieldAnything()-finally-is-triggered"); } function inner(): void { try { iteratorConsumer(); } catch (\Throwable) { echo "catch in inner()\n"; } finally { echo "finally in inner()\n"; } } function outer(): void { try { inner(); } catch (\Throwable) { echo "catch in outer()\n"; } finally { echo "finally in outer()\n"; } } function main(): void { try { outer(); } catch(\Throwable) { echo "catch in main()\n"; } finally { echo "finally in main()\n"; } } main();
Output for 8.3.28 - 8.3.29, 8.4.15 - 8.4.16, 8.5.0 - 8.5.1
finally in yieldSomething() catch in outer() finally in outer() finally in main()
Output for 8.1.34, 8.2.27 - 8.2.30, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
finally in yieldSomething() catch in inner() finally in inner() finally in outer() finally in main()

preferences:
59.83 ms | 407 KiB | 5 Q