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();