$this->foo(); } } class D2 extends C2 { protected function foo() { echo "D2::foo\n"; } } class E2 extends D2 { } $obj = new E2(); // This should call C2::foo, not D2::foo $obj->test(); class C3 { private function foo() { echo "C3::foo\n"; } public function test() { $this->foo(); } } class D3 extends C3 { public function foo() {
{ echo "D2::foo " . (isset($this) ? "true\n" : "false\n"); } public function test() { F2::foo(); } } class E2 extends D2 { } class F2 extends D2 { } $e2 = new E2(); $e2->test(); // Outputs 'D2::foo false' (Zend outputs 'D2::foo true') class D3 { private function foo() { echo "D3::foo " . (isset($this) ? "true\n" : "false\n"); } public function test() { F3::foo(); } } class X3 extends D3 { private function foo()
function main2() { $e2 = new E2(); $e2->test(); // Outputs 'D2::foo false' (Zend outputs 'D2::foo true') }