溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

實例介紹PHP實現(xiàn)多繼承的trait語法

發(fā)布時間:2020-05-14 11:09:23 來源:億速云 閱讀:196 作者:Leah 欄目:編程語言

這篇文章主要為大家詳細介紹了PHP實現(xiàn)多繼承的trait語法,文中示例代碼介紹的非常詳細,零基礎(chǔ)也能參考此文章,感興趣的小伙伴們可以參考一下。

PHP沒有多繼承的特性。即使是一門支持多繼承的編程語言,我們也很少會使用這個特性。在大多數(shù)人看來,多繼承不是一種好的設(shè)計方法。

但是開發(fā)中用到多繼承該怎么辦呢?
下面介紹一下使用"trait"來實現(xiàn)php中多繼承的問題。

自PHP5.4開始,php實現(xiàn)了代碼復用的方法"trait"語法。

Trait是為PHP的單繼承語言而準備的一種代碼復用機制。為了減少單繼承的限制,是開發(fā)在不同結(jié)構(gòu)層次上去復用method,
Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題。

需要注意的是,從基類繼承的成員會被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。

先來個例子:

trait TestOne{
    public function test()
    {
        echo "This is trait one <br/>";
    }
}
trait TestTwo{
    public function test()
    {
        echo "This is trait two <br/>";
    }
    public function testTwoDemo()
    {
        echo "This is trait two_1";
    }
}
class BasicTest{
    public function test(){
        echo "hello world\n";
    }
}
class MyCode extends BasicTest{
    //如果單純的直接引入,兩個類中出現(xiàn)相同的方法php會報出錯
    //Trait method test has not been applied, because there are collisions with other trait 
    //methods on MyCode 
    //use TestOne,TestTwo;
    //怎么處理上面所出現(xiàn)的錯誤呢,我們只需使用insteadof關(guān)鍵字來解決方法的沖突
    use TestOne,TestTwo{
        TestTwo::test insteadof TestOne;
    }
}
$test = new MyCode();
$test->test();
$test->testTwoDemo();

運行結(jié)果:

This is trait two 
This is trait two_1

以上就是PHP實現(xiàn)多繼承的trait語法的內(nèi)容,代碼詳細清楚,如果在日常工作遇到這個問題,希望你能通過這篇文章解決問題。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI