function main() { $obj = new E(); $obj->test(); $obj->foo(); E::foo(); }
function main() { $a = new A(); $b = new B(); $c = new C(); B::test($a); C::test($b); E::test($c); }
function main() { $d = new D(); $d->test(); $d->test2(); $e = new E(); $e->test(); $e->test2(); }
<?php trait T { private function foo() { } } class C { protected function foo() { } } class D extends C { use T; protected function foo() { } } class E extends C { public static function test($obj) { $obj->foo(); } } $d = new D(); E::test($d); echo "Done\n";