<?php class Foo { protected function f() { return 'Foo'; } } trait T { public function f() { return 'Bar'; } } class Bar extends Foo { use T; } $b = new Bar(); echo $b->f() . "\n";
<?php trait T { static final function f() { echo "Hello\n"; } } class Foo { use T; } class Bar extends Foo { use T; } Bar::f();
<?php class Foo { public final function f() { return 'Foo'; } } class Bar extends Foo { public final function f() { return 'Bar'; } } $bar = new Bar(); echo $bar->f() . "\n";
} if (defined('parent::ZERO')) { var_dump(parent::ZERO); } $a = 'parent::ZERO'; if (defined($a)) { var_dump(parent::ZERO); } } } class Goo { const ZERO = Bar::ZERO; } $a = 'Foo::ZERO'; if (defined($a)) { var_dump(Foo::ZERO); } $a = 'Bar::ZERO'; if (defined($a)) { var_dump(Bar::ZERO); } $a = 'Goo::ZERO'; if (defined($a)) { var_dump(Goo::ZERO); } $obj = new Foo(); $obj->f(); $obj = new Bar(); $obj->f();