亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

蕭峰與郭靖教你學(xué)會(huì)PHP的Trait

keke / 3481人閱讀

摘要:的使用場(chǎng)景如以下應(yīng)用場(chǎng)景我是人,我能吃飯降龍十八掌降龍十八掌類與類都繼承于,都有共同的方法,顯然,我們不能將這個(gè)方法寫到類,不然隨便一個(gè)路人甲繼承了類,就擁有了技能。

在PHP5.4之前,PHP面向?qū)ο笮枰獜?fù)用代碼的方式是使用類的繼承。但PHP只支持單繼承,在應(yīng)對(duì)較復(fù)雜的業(yè)務(wù)邏輯中,單繼承就顯得捉襟見(jiàn)肘了。

trait的使用場(chǎng)景

如以下應(yīng)用場(chǎng)景:

class Person {
    public function eat() {
        echo "我是人,我能吃飯
"; } } class GuoJing extends Person { public function kungfu() { echo "降龍十八掌!
"; } } class XiaoFeng extends Person { public function kungfu() { echo "降龍十八掌!
"; } }

Guojing 類 與 XiaoFeng 類都繼承于Person,都有共同的 Kungfu 方法,顯然,我們不能將這個(gè) Kungfu 方法寫到 Person 類,不然隨便一個(gè)路人甲繼承了 Person 類,就擁有了 Kungfu 技能。

用Trait就能解決此問(wèn)題:

";
    }
}

class Person {
    public function eat() {
        echo "我是人,我能吃飯
"; } } class GuoJing extends Person { use Tool; } class XiaoFeng extends Person { use Tool; } $guojing = new GuoJing(); $xiaofeng = new XiaoFeng(); $guojing->kungfu(); $xiaofeng->kungfu();

結(jié)果如下:

降龍十八掌!
降龍十八掌!
方法/屬性的重寫

如果Trait類、基類和本類中的方法或?qū)傩酝?,最終會(huì)以哪個(gè)為準(zhǔn)?

";
    }
}

class Person {
    public function eat() {
        echo "我是人,我能吃飯
"; } public function kungfu() { echo "不是每個(gè)人都會(huì)功夫
"; } } class GuoJing extends Person { use Tool; public function kungfu() { echo "除了降龍十八掌,我還懂九陰真經(jīng)!
"; } } class XiaoFeng extends Person { use Tool; } $guojing = new GuoJing(); $guojing->kungfu();

結(jié)果:

除了降龍十八掌,我還懂九陰真經(jīng)!

注釋本類的 kungfu 方法,得出的結(jié)果是:

降龍十八掌!

當(dāng)方法或?qū)傩酝麜r(shí),當(dāng)前類中的方法會(huì)覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。

組合多個(gè)trait

多個(gè)trait有同名的方法/屬性時(shí),會(huì)報(bào)錯(cuò):

";
    }
}

trait Skill {
    public function kungfu() {
        echo "渾厚的內(nèi)力修為
"; } } class GuoJing { use Tool, Skill; } $guojing = new GuoJing(); $guojing->kungfu();
Fatal error: Trait method kungfu has not been applied, because there are collisions with other trait methods on GuoJing 

解決方式:使用insteadof和as來(lái)解決沖突

insteadof: 使用某個(gè)方法替代另一個(gè)

as: 給方法取別名

";
    }
}

trait Skill {
    public function kungfu() {
        echo "渾厚的內(nèi)力修為
"; } } class XiaoFeng { use Tool, Skill { Skill::kungfu insteadof Tool; Skill::kungfu as ability; } } $xiaofeng = new XiaoFeng(); $xiaofeng->ability();
渾厚的內(nèi)力修為
trait方法的訪問(wèn)控制

as關(guān)鍵詞可以修改方法的訪問(wèn)控制

";
    }
}

class XiaoFeng {
    use Tool {
        Tool::kungfu as protected ability; // 修改方法的訪問(wèn)控制并起別名
    }
}

$xiaofeng = new XiaoFeng();
$xiaofeng->ability();

報(bào)錯(cuò):

Fatal error: Uncaught Error: Call to protected method XiaoFeng::ability() from context
Trait組合

Trait也能組合Trait,同時(shí),Trait中支持抽象方法、靜態(tài)屬性、靜態(tài)方法。

";
    }
}

trait Feature{
    use Tool;
    abstract public function dream();
    public static function character() {
        echo "磊落豪雄 
"; } } class XiaoFeng { use Feature; public function dream() { echo "弄清楚:我是誰(shuí)?
"; } } $xiaofeng = new XiaoFeng(); $xiaofeng->kungfu(); XiaoFeng::character(); $xiaofeng->dream();

結(jié)果:

降龍十八掌!
磊落豪雄 
弄清楚:我是誰(shuí)? 
源碼下載

源碼倉(cāng)庫(kù)鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/23291.html

相關(guān)文章

  • 金庸武俠世界和SAP江湖

    摘要:年月日晚,成都地鐵一號(hào)線,手機(jī)上突然彈出來(lái)一條金庸去世的新聞。作為一個(gè)開發(fā)人員,我在金庸這十四部名著里看到的,是的江湖。金庸的這個(gè)武功設(shè)定,和公司的數(shù)字化轉(zhuǎn)型,向的轉(zhuǎn)型很像。 2018年10月30日晚,成都地鐵一號(hào)線,Jerry手機(jī)app上突然彈出來(lái)一條金庸去世的新聞。 Jerry識(shí)字很早,小學(xué)一年級(jí)就開始蹭我父親的《射雕英雄傳》看了。小時(shí)候,我爸工作的車間里有一位領(lǐng)導(dǎo),退休后把自己家...

    Blackjun 評(píng)論0 收藏0
  • 教你用認(rèn)知和人性來(lái)做最棒程序員

    摘要:不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。 不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。最初我是想用借優(yōu)秀的產(chǎn)品經(jīng)理思維來(lái)做最棒程序員的這個(gè)標(biāo)題,但想想還是要有同理心,技術(shù)同學(xué)平時(shí)和產(chǎn)品同學(xué)已經(jīng)是相愛(ài)相殺了...

    Scliang 評(píng)論0 收藏0
  • 教你用認(rèn)知和人性來(lái)做最棒程序員

    摘要:不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。 不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。最初我是想用借優(yōu)秀的產(chǎn)品經(jīng)理思維來(lái)做最棒程序員的這個(gè)標(biāo)題,但想想還是要有同理心,技術(shù)同學(xué)平時(shí)和產(chǎn)品同學(xué)已經(jīng)是相愛(ài)相殺了...

    Kosmos 評(píng)論0 收藏0
  • PHP 特性之 trait (一)

    摘要:在閱讀文檔的時(shí)候看到一個(gè)類是以聲明的。是一種代碼復(fù)用技術(shù),為的單繼承限制提供了一套靈活的代碼復(fù)用機(jī)制。下面把的代碼做一個(gè)修改以上代碼會(huì)輸出??梢钥闯鰞?yōu)先級(jí)的順序?yàn)?,?dāng)前類的優(yōu)先級(jí)基類。 ??在閱讀laravel文檔的時(shí)候看到一個(gè)類 是以 Trait聲明的。平時(shí)在工作中從來(lái)沒(méi)有用過(guò),于是就去看了下官方文檔。原來(lái)這個(gè)類早在php5.4.0就有了。可惜在項(xiàng)目中從來(lái)沒(méi)有用過(guò)。 ??Trait看...

    ermaoL 評(píng)論0 收藏0
  • 關(guān)于PHPTrait特性

    摘要:關(guān)于作者程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事和前端開發(fā),使用和,端使用混合式開發(fā)。和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問(wèn)題。它為傳統(tǒng)繼承增加了水平特性的組合也就是說(shuō),應(yīng)用的幾個(gè)之間不需要繼承。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和...

    wind3110991 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<