php5.4新特性 traits(不知道中文翻译叫什么)
traits 作用: 代码复用,变相实现多重继承,或者叫类的代码片段
声明:
trait trait_name { //method //attribute //跟class类似 }
调用:
trait trait_name2 {//组合多个trait use trait_name1;
abstract public function getWorld();//可以声明抽象方法 } class class_name{ use trait_name1,trait_name2;
public function getWorld(){}//需要实现抽象方法 }
注意:
1. trait 不可实例化,trait 只是代码片段,当有继承时,use trait 将覆盖父类方法
2. trait 可以声明抽象方法,静态方法等
3. 使用 trait 之间不可有相同的方法或属性声明,出现相同使用时需处理,如下:
<?php trait A { public function smallTalk() { echo 'a'; } public function bigTalk() { echo 'A'; } } trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } trait C { public function smallTalk() { echo 'c'; } public function bigTalk() { echo 'C'; } } class Talker { use A, B,C { B::smallTalk insteadof A,C;//必须处理冲突的名,指定默认使用 B::bigTalk insteadof A,C;//必须处理冲突的名,指定默认使用 A::bigTalk as AbigTalk;//如果需使用其他类的方法,对方法重命名 C::bigTalk as CbigTalk;//如果需使用其他类的方法,对方法重命名 C::smallTalk as protected CsmallTalk;//如果需使用其他类的方法,对方法重命名,且修改方法可见性 A::smallTalk as protected;//如果需使用其他类的方法,修改方法可见性 } } $a=new Talker(); $a->AbigTalk();
4.本类声明的方法将重写父类的方法或trait的方法
5. 不能实现接口(implements),继承(entends)等.(继承可以用类似的use 来实现)
官方介绍:http://php.net/manual/zh/language.oop5.traits.php