php中的trait
作者:bin自php5.4起,php提供了另一种代码复用的方法:trait
代码复用,首先想到的是继承,这是纵向的,trait更像是横向平行的。
一、使用
//定义一个trait trait Iam_trait{ function my_echo($data){ echo $data; } static function my_print($data){ echo $data; } } class CLass_A{ //在类中使用tarit use Iam_trait; } CLass_A::my_print('using trait staic'); $a = new CLass_A(); $a->my_echo('using tarit method');
二、使用多个trait:
use first_trait, second_trait;
三、trait之间嵌套
trait Iam_trait_2{ use Iam_trait; }
四、定义抽象方法:
trait Iam_trait{ //使用trait必须实现这个方法 abstract public function my_echo($data); } class CLass_A{ use Iam_trait; function my_echo($data){ echo $data; } } $a = new CLass_A(); $a->my_echo('using tarit method');
五、避免冲突
如果不同的trait有相同的方法名字,那么可以这样解决冲突:
trait Iam_trait{ function my_echo(){ echo 'Iam_trait'; } } trait Iam_trait_2{ function my_echo(){ echo 'Iam_trait_2'; } } class CLass_A{ use Iam_trait,Iam_trait_2 { //这里声明,用Iam_trait_2->my_echo替换Iam_trait->my_echo Iam_trait_2::my_echo insteadof Iam_trait; } } $a = new CLass_A(); $a->my_echo();