<?php
class Test {
public function foo() {
function bar() {
echo "Hello from bar!" . PHP_EOL;
}
echo "Hello from foo!" . PHP_EOL;
}
}
$t = new Test;
// PHP Fatal error: Call to undefined method Test::bar()
// $t->bar();
// Works, prints "Hello from foo!"
// bar() is now defined, but not where you expect
$t->foo();
// PHP Fatal error: Call to undefined method Test::bar()
// $t->bar();
// Works, prints "Hello from bar!"
// Note that this is global scope, not from Test
bar();
PD9waHAKCmNsYXNzIFRlc3QgewoJcHVibGljIGZ1bmN0aW9uIGZvbygpIHsKCQlmdW5jdGlvbiBiYXIoKSB7CgkJCWVjaG8gIkhlbGxvIGZyb20gYmFyISIgLiBQSFBfRU9MOwoJCX0KCQkKCQllY2hvICJIZWxsbyBmcm9tIGZvbyEiIC4gUEhQX0VPTDsKCX0KfQoKJHQgPSBuZXcgVGVzdDsKLy8gUEhQIEZhdGFsIGVycm9yOiAgQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kIFRlc3Q6OmJhcigpCi8vICR0LT5iYXIoKTsKCi8vIFdvcmtzLCBwcmludHMgIkhlbGxvIGZyb20gZm9vISIKLy8gYmFyKCkgaXMgbm93IGRlZmluZWQsIGJ1dCBub3Qgd2hlcmUgeW91IGV4cGVjdAokdC0+Zm9vKCk7CgovLyBQSFAgRmF0YWwgZXJyb3I6ICBDYWxsIHRvIHVuZGVmaW5lZCBtZXRob2QgVGVzdDo6YmFyKCkKLy8gJHQtPmJhcigpOwoKLy8gV29ya3MsIHByaW50cyAiSGVsbG8gZnJvbSBiYXIhIgovLyBOb3RlIHRoYXQgdGhpcyBpcyBnbG9iYWwgc2NvcGUsIG5vdCBmcm9tIFRlc3QKYmFyKCk7