Trait特性

PHP5.4以后實現(xiàn)了一個新的代碼復用的方法Trait,Trait為了減少單繼承語言的限制,相對于傳統(tǒng)繼承增加了水平特性的組合,也就是說幾個class之間不需要繼承。

Trait不是類,不能被實例化,Trait中的代碼可以使用use直接導入到類中,相當于把trait的代碼復制到當前類中。

實例:

<?php
trait play
{
    public function football()
    {
        return 'trait foot ball';
    }
}

class sport
{
    // 使用use關鍵字使用trait play中的代碼
    use play;
}
$o = new sport;
$o->football();

一、優(yōu)先級

從基類繼承的成員會被trait插入的成員覆蓋,優(yōu)先順序:當前類成員 > trait類成員 > 基類成員

二、使用多個Trait

通過逗號分隔,在use聲明列出多個Trait,可以都插入到一個類中。

<?php
trait playBall
{
    public function football(){}
}

trait playTools
{
    public function piano(){}
}

class sport extends ball
{
    use playBall, playTools;
}

三、沖突的解決

如果兩個trait都插入了一個同名的方法,如果沒有明確解決沖突將會產生一個致命錯誤。

為了解決多個 trait 在同一個類中的命名沖突,需要使用 insteadof操作符來明確指定使用沖突方法中的哪一個。

以上方式僅允許排除掉其它方法,as 操作符可以為某個方法引入別名。注意,as 操作符不會對方法進行重命名,

也不會影響其方法。

<?php
trait playBall
{
    public function football(){}
}

trait playTools
{
    public function football(){}
}

class sport
{
    use playBall, playTools {
        // 用playTools中的football方法替換掉playBall中的football的方法
        playTools::football insteadof playBall;
        // 給playBall的football方法一個別名
        playBall::football as Ball;
    }
}

四、Trait與Trait的組合

Trait中也可以使用Trait,在Trait定義時可以使用一個或者多個Trait

trait playBall
{
    public function football()
    {
        return 'trait foot ball';
    }
}

trait playTools
{
    use playBall;

    public function piano()
    {
        return 'trait piano';
    }
}

另外,PHP中的use的用法:

  1. 命名空間
  2. 匿名函數(shù)
  3. Trait引用
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 眾所周知,一直以來PHP和很多語言一樣是單繼承的語言,但是常常在編碼過程中,我們需要在當前類中使用兩個或兩個...
    金星show閱讀 1,950評論 0 3
  • Scala與Java的關系 Scala與Java的關系是非常緊密的?。?因為Scala是基于Java虛擬機,也就是...
    燈火gg閱讀 3,611評論 1 24
  • 寫完《慈悲》之后,已經(jīng)很久沒有路內的消息。最近,路內出了本小說集《十七歲的輕騎兵》 ,于是迫不及待的買來大肆啃讀一...
    herensi閱讀 197評論 0 0
  • 《你憑什么自己不努力,還抱怨原生階層》 陶瓷兔子的小木屋 2018.02.06 這是個一半的人以正確的方式做著錯誤...
    陶瓷兔子的小木屋閱讀 1,053評論 7 8
  • 這一年 還要繼續(xù)走著 只要不曾跌倒 這一年 諸事一件件去做 不貪多 這一年 對自己好一點 活的灑脫些 這一年 去了...
    樊小籬閱讀 184評論 5 19

友情鏈接更多精彩內容