3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace{ function foo(){ echo "I'm (g)root!\n"; } function foo2(){ echo "I'm (g)root2!\n"; } function foo3(){ echo "I'm (g)root3!\n"; } } namespace Baz{ Class Test { function foobar(){ foo3(); } } Class Test2 { function foobar(){ foo3(); } } echo 'Function resolved at runtime so output changes' . "\n"; foo(); if(true){function foo(){ echo "I'm not (g)root!\n"; }} foo(); echo '------' . "\n"; echo 'Call for test purpose before Baz\foo3() has been defined' . "\n"; $test = new Test(); $test->foobar(); echo '------' . "\n"; echo 'Function resolved at parsing time so output does not change' . "\n"; foo2(); function foo2(){ echo "I'm not (g)root2!\n"; } foo2(); echo '------' . "\n"; echo 'Function resolved at runtime so output changes' . "\n"; foo3(); eval("namespace Baz; function foo3(){echo 'I\'m not (g)root3!\n';}"); foo3(); echo '------' . "\n"; echo 'Method has already been called so using the old version' . "\n"; $test->foobar(); echo 'Method is called for the first time so using the new version' . "\n"; $test2 = new Test2(); $test2->foobar(); }
Output for 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.23, 7.4.0 - 7.4.11, 8.0.0alpha1 - rc2
Function resolved at runtime so output changes I'm (g)root! I'm not (g)root! ------ Call for test purpose before Baz\foo3() has been defined I'm (g)root3! ------ Function resolved at parsing time so output does not change I'm not (g)root2! I'm not (g)root2! ------ Function resolved at runtime so output changes I'm (g)root3! I'm not (g)root3! ------ Method has already been called so using the old version I'm (g)root3! Method is called for the first time so using the new version I'm not (g)root3!