<?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();
}
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!
Output for 5.3.0 - 5.3.29
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 not (g)root3!
Method is called for the first time so using the new version
I'm not (g)root3!