PHPのTRAIT(トレイト)
知人にTRAIT(トレイト)を説明する機会があった。
トレイトは、PHPの多重継承禁止の制約を回避するためのもの。
例えばカレーうどんはうどんを継承してもよいが、カレーを継承してもよい気がする。
使用されているスパイスの一覧を取得する機能とかがあってもよさそうだ。
また、動物を継承した鳥クラスと乗り物を継承した飛行機は
機能がほとんど同じ飛ぶメソッドを持っているが、
インタフェースに処理は書けないため
鳥と飛行機のそれぞれに飛ぶメソッドの処理を記述しなければならない。
ここで、飛ぶメソッドの実装だけを切り出して
他のクラスから利用できるようにしたものがトレイトである。
以下サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php class Bird { use TraitFly; } class Plane{ use TraitFly; } trait TraitFly { private function getMyClassName(){ return get_class($this); } public function fly(){ $myClassName = $this->getMyClassName(); echo $myClassName . "は飛ぶ" . PHP_EOL; } } $flyingThing = new Bird(); $flyingThing->fly(); $flyingThing = new Plane(); $flyingThing->fly(); |