function test() { $a = X::foo(); $a(); $a = Y::foo(); $a(); $a = X::bar(); $a(); $a = Y::bar(); $a(); $x = new X(); $a = $x->bar(); $a(); $x = new Y(); $a = $x->bar(); $a(); $a = X::bar_nonstatic(); $a(); $a = Y::bar_nonstatic(); $a(); $x = new X(); $a = $x->bar_nonstatic(); $a(); $x = new Y(); $a = $x->bar_nonstatic(); $a(); }
function test($str) { X::bar($str); (new X())->bar($str); Y::bar($str); (new Y())->bar($str); }
} class Z extends Y { public function zoo2() { return "zoo2/" . $this->nonexistingzoo(8, 8, 8); } public function zoo() { return $this->bar() . $this->zoo2() . X::nonexisting1(3); } } // calling static methods resolved in compile time echo X::nonexistingfoo(1, 2, 3); echo call_user_func_array(array("X", "nonexisting2"), array(10, 20, 30)); echo Y::nonexistingfoo(1, 2, 3); echo Y::nonexistingfoo2(4); echo call_user_func_array(array("Y", "nonexisting3"), array("a", 'b', 'c')); echo Z::nonexistingstatic(); // calling instance methods $x = new X(); echo $x->bar(); echo $x->non_existing_func(1, 2, 3); echo call_user_func(array($x, "foo"), 5, 6, 7); $y = new Y(); echo $y->bar(); echo $y->nonexisting4(9, 8, 7); echo call_user_func(array($y, "bar"), 4, 5, 6); echo call_user_func(array($y, "nonexisting5"), 333, 666, 999); $z = new Z(); echo $z->zoo();
<?php class X { function ref(&$ref) { $ref = 1; } function bar() { $this->ref($this->priv); } } class Y extends X { private $priv; } class Z extends Y { } $z = new Z(); $z->bar(); var_dump($z); $y = new Y(); $y->bar(); var_dump($y);