Trait 和 Class 相似,为类似 PHP 的单继承语言而准备的一种代码复用机制。
一、属性方面
<?php
trait B{
public $same = true;
public $different = false;
}
class C{
use B;
public $same = true; // PHP 7.0.0 后没问题,之前版本是 E_STRICT 提醒
public $different = true; // 致命错误
}
二、方法方面
<?php
//基类
class A{
public function say(){
return '基类 A';
}
}
//trait
trait B{
public function say(){
return 'trait B';
}
public function do(){
return 'this is a important thing';
}
}
//当前类
class C extends A{
use B;
}
$c = new C;
echo $c->say();//trait B
echo $c->do();
三、总结
- trait 还是很容易理解的,像继承,但是更加灵活。
- trait、基类、当前类三者之间可以重复定义方法,重复定义属性的话初始值必须一致。
- say方法是为了说明优先级:当前类方法 > trait方法 > 基类方法。
- do方法才是常用模式。