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方法纔是常用模式。