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都插入了一個同名的方法仅孩,如果沒有明確解決沖突將會產(chǎn)生一個致命錯誤。

為了解決多個 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引用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勺爱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讯检,更是在濱河造成了極大的恐慌琐鲁,老刑警劉巖卫旱,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異围段,居然都是意外死亡顾翼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門奈泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來适贸,“玉大人,你說我怎么就攤上這事涝桅“葑耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵冯遂,是天一觀的道長蕊肥。 經(jīng)常有香客問我,道長蛤肌,這世上最難降的妖魔是什么壁却? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮裸准,結(jié)果婚禮上展东,老公的妹妹穿的比我還像新娘。我一直安慰自己狼速,他們只是感情好琅锻,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著向胡,像睡著了一般恼蓬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上僵芹,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天处硬,我揣著相機與錄音,去河邊找鬼拇派。 笑死荷辕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的件豌。 我是一名探鬼主播疮方,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茧彤!你這毒婦竟也來了骡显?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惫谤,沒想到半個月后壁顶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡溜歪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年若专,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝴猪。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡调衰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拯腮,到底是詐尸還是另有隱情窖式,我是刑警寧澤蚁飒,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布动壤,位于F島的核電站,受9級特大地震影響淮逻,放射性物質(zhì)發(fā)生泄漏琼懊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一爬早、第九天 我趴在偏房一處隱蔽的房頂上張望哼丈。 院中可真熱鬧,春花似錦筛严、人聲如沸醉旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽车胡。三九已至,卻和暖如春照瘾,著一層夾襖步出監(jiān)牢的瞬間匈棘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工析命, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留主卫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓鹃愤,卻偏偏與公主長得像簇搅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子软吐,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

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