PHPでは多重継承が禁じられて(親は1つしかもてない)いるため、共通性のあるコードを書こうと思った時に親にかいていない場合限界があります。
そんな時に使えるのがTraitという考え方で、これを使いますと親ではないのに、コードを再利用することができます(PHP5.4から有効のようです)。
通常は以下のようなファイル構成でしょうか。
- Traitそのもの
- Traitを使う一般のクラス
- 一般のクラスを使うプログラム
以下に実際のサンプルを書いて見ようと思います。
sampleTrait.php(Traitそのもの)
1 2 3 4 5 6 7 8 9 10 11 |
<?php trait Calculator { private $tax = 0.08; public function samplefunc1($price) { return $price * $this->tax; } } |
SampleClass.php()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php require_once 'sampleTrait.php'; class sampleClass { use Calculator; public function __construnct() { } public function hoge() { return 'hoge'; } } |
sampleProgram.php(一般のクラスを使うプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php require_once 'sampleClass.php'; $sampClass = new SampleClass(); //クラス内部のメソッド echo $sampClass->hoge(). "\n"; //hoge //traitしたクラスのメソッド echo $sampClass->samplefunc1(1000). "\n"; //80 |
親とまでは行かないけど汎用的なメソッドを実装させたい時に使えそう・・・
比較的汎用的なメソッドを水平展開させたいときにつかったりします。