function main() { $c = new C(); B::test($c); C::test($c); D::test($c); }
function main() { $d = new D(); $d->test(); $d->test2(); $e = new E(); $e->test(); $e->test2(); }
<?php class C { private function foo() { echo "C::foo\n"; } public function test() { // This should not call C::foo, it should fatal D::foo(); } } class D extends C { private function foo() { echo "D::foo\n"; } } $obj = new D(); $obj->test();
<?php class A { public static function test($x = null) { if (!is_null($x)) { echo "{$x}\n"; } return get_called_class(); } } class B extends A { } class C extends A { } class D extends A { } echo A::test(B::test(C::test(D::test()))) . "\n"; ?> ==DONE==
<?php trait U { public function test() { echo __CLASS__ . "\n"; $this->foo(); (yield null); } } class D { use U; protected function foo() { echo "U::foo\n"; } } $obj = new D(); $x = $obj->test(); foreach ($x as $v) { }
<?php class C { public static function test() { D::prot(); print_r(get_class_methods("D")); } } class D extends C { protected static function prot() { echo "Successfully called D::prot().\n"; } } D::test();