PHP中的Trait類詳解
阿新 • • 發佈:2020-12-15
通俗來講, Trait類不是類,無法直接使用new關鍵詞來建立物件。
傳統的PHP類是單一繼承模式,即每個類只能繼承一個父類。
Trait類的出現讓PHP類可以繼承多個“父類”。
一、如何使用:
定義一個Class :
Class cDemo
{
public function cfun()
{
return __METHOD__;
}
}
定義兩個Trait類:
Trait tDemo1 { public function fun1() { return __METHOD__; } } Trait tDemo2 { public function fun2() { return __METHOD__; } }
接下來使用一個class來繼承上面的自定義的類
class myClass extends cDemo
{
// 引用Trait類
use tDemo1, tDemo2;
}
// 例項化類
$obj = new myClass();
// 呼叫父類方法
echo $obj->cfun(); // cDemo::cfun 這個是父類cDemo中定義的方法
// 呼叫Trail中的方法
echo $obj->fun1(); // tDemo1::fun1
echo $obj->fun2(); // tDemo2::fun2
二、注意事項
-
優先順序關係本類中的方法 > Trait中的方法 >父類中的方法
-
當一個類繼承了多個Trail,且多個Trait中都包含相同的方法時,呼叫此方法則會報錯;解決方案:
使用 insteadof 關鍵字和 as 關鍵字
// 這裡假設tDemo1 和 tDemo2 中都含有fun1 方法
class myClass extends cDemo
{
// 引用Trait類
use tDemo1, tDemo2{
tDemo2::fun1 insteadOf tDemo1;
tDemo1::fun1 as fun2;
}
}