17. PHP 5.4 でコード再利用:Trait
Trait: 単一継承の言語でコードを再利用する仕組み
実装の再利用( ≠ interface:実装を強制)
クラスや他のTraitとのメソッド名衝突を解決する仕組みが必要
<?php <?php
trait A { trait A {
public function show() { public function show() { echo 'Hello,';} }
echo 'Hello,',$this->getName(),'!'; }
abstract public function getName(); trait B {
} public function show() {echo 'PHP!';} }
class Base { /* 1 */ } class Foo {
use A, B {
class Foo extends Base { A::show insteadof B; リネームでは
use A; B::show as showN; } なくエイリアス
public function getName() { echo 'PHP'; } }
}
$obj = new Foo(); $obj = new Foo();
echo $obj->show(); // Hello,PHP! echo $obj->show() . $obj->showN();