1. 程式人生 > 其它 >PHP中的Trait類詳解

PHP中的Trait類詳解

技術標籤:PHPphp

通俗來講, 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;
    }
}