国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP中的Traits詳解

Harriet666 / 2796人閱讀

摘要:原文鏈接是單繼承的語(yǔ)言,在出現(xiàn)之前,的類無(wú)法同時(shí)從兩個(gè)基類繼承屬性或方法。的和語(yǔ)言的組合功能類似,通過(guò)在類中使用關(guān)鍵字聲明要組合的名稱,而具體某個(gè)的聲明使用關(guān)鍵詞,不能直接實(shí)例化。

原文鏈接:http://tabalt.net/blog/php-tr...

PHP是單繼承的語(yǔ)言,在PHP 5.4 Traits出現(xiàn)之前,PHP的類無(wú)法同時(shí)從兩個(gè)基類繼承屬性或方法。php的Traits和Go語(yǔ)言的組合功能類似,通過(guò)在類中使用use關(guān)鍵字聲明要組合的Trait名稱,而具體某個(gè)Trait的聲明使用trait關(guān)鍵詞,Trait不能直接實(shí)例化。具體用法請(qǐng)看下面的代碼:

carName}
";
        }
    }
    class Person {
        public function eat() {
            echo "eat
";
        }
    }
    class Student extends Person {
        use Drive;
        public function study() {
            echo "study
";
        }
    }
    $student = new Student();
    $student->study();
    $student->eat();
    $student->driving();

輸出結(jié)果如下:

study
eat
driving trait

上面的例子中,Student類通過(guò)繼承Person,有了eat方法,通過(guò)組合Drive,有了driving方法和屬性carName。

如果Trait、基類和本類中都存在某個(gè)同名的屬性或者方法,最終會(huì)保留哪一個(gè)呢?通過(guò)下面的代碼測(cè)試一下:

hello();
    $student->driving();

輸出結(jié)果如下:

hello student
driving from drive

因此得出結(jié)論:當(dāng)方法或?qū)傩酝麜r(shí),當(dāng)前類中的方法會(huì)覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。

如果要組合多個(gè)Trait,通過(guò)逗號(hào)分隔 Trait名稱:

use Trait1, Trait2;

如果多個(gè)Trait中包含同名方法或者屬性時(shí),會(huì)怎樣呢?答案是當(dāng)組合的多個(gè)Trait包含同名屬性或者方法時(shí),需要明確聲明解決沖突,否則會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤。


輸出結(jié)果如下:

PHP Fatal error:  Trait method hello has not been applied, because there are collisions with other trait methods on Class1 in ~/php54/trait_3.php on line 20

使用insteadof和as操作符來(lái)解決沖突,insteadof是使用某個(gè)方法替代另一個(gè),而as是給方法取一個(gè)別名,具體用法請(qǐng)看代碼:

hello();
$Obj1->hi();
echo "
";
$Obj2 = new Class2();
$Obj2->hello();
$Obj2->hi();
$Obj2->hei();
$Obj2->hehe();

輸出結(jié)果如下:

Trait2::hello
Trait1::hi

Trait2::hello
Trait1::hi
Trait2::hi
Trait1::hello

as關(guān)鍵詞還有另外一個(gè)用途,那就是修改方法的訪問(wèn)控制:

hello(); # 報(bào)致命錯(cuò)誤,因?yàn)閔ello方法被修改成受保護(hù)的
    $Obj2 = new Class2();
    $Obj2->hello(); # 原來(lái)的hello方法仍然是公共的
    $Obj2->hi();  # 報(bào)致命錯(cuò)誤,因?yàn)閯e名hi方法被修改成私有的

Trait 也能組合Trait,Trait中支持抽象方法、靜態(tài)屬性及靜態(tài)方法,測(cè)試代碼如下:

sayHello();
$Obj->sayWorld();
echo $Obj->getWorld() . "
";
HelloWorld::doSomething();
$Obj->inc();
$Obj->inc();

輸出結(jié)果如下:

Hello
World
get World
Doing something
1
2

原文鏈接:http://tabalt.net/blog/php-tr...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/20999.html

相關(guān)文章

  • PHP 自 5.2 到 5.6 中新增的功能詳解

    摘要:本文將會(huì)介紹自起,直至中增加的新特征。棄用的功能以下幾個(gè)功能被棄用,若在配置文件中啟用,則會(huì)在運(yùn)行時(shí)發(fā)出警告。該類的完整限定名是其中第一個(gè)反斜杠表示全局命名空間。目的在于模仿的不對(duì),目的是為了讓發(fā)布應(yīng)用程序更加方便。 截至目前(2014.2), PHP 的最新穩(wěn)定版本是 PHP5.5, 但有差不多一半的用戶仍在使用已經(jīng)不在維護(hù) [注] 的 PHP5.2, 其余的一半用戶在使用 PHP5...

    番茄西紅柿 評(píng)論0 收藏0
  • php 代碼復(fù)用機(jī)制--traits

    摘要:是一種為類似的單繼承語(yǔ)言而準(zhǔn)備的代碼復(fù)用機(jī)制。因?yàn)橹械淖兞凯h(huán)境是基于函數(shù)的,所以會(huì)輸出博客鏈接代碼復(fù)用機(jī)制,本文后續(xù)如有更新將會(huì)在博客更新。 提到 php 的代碼復(fù)用,我們可能第一時(shí)間會(huì)想到繼承,但是這種單繼承語(yǔ)言一旦派生的子類過(guò)多,那么會(huì)產(chǎn)生一系列的問(wèn)題,比如依賴父類、耦合性太大、破壞了類的封裝性。那么有沒(méi)有更好的方法來(lái)實(shí)現(xiàn)代碼復(fù)用呢? 自 PHP 5.4.0 起,PHP 實(shí)現(xiàn)了另外...

    yedf 評(píng)論0 收藏0
  • 【modernPHP專題(5)】類多繼承的替代方案Traits

    摘要:概述是新進(jìn)入的特性,其目的就是解決的類不能多繼承的問(wèn)題。可以理解為一組能被不同的類都能調(diào)用到的方法集合。只需要在類中使用關(guān)鍵詞引入即可,可引入多個(gè),用隔開(kāi)。為了解決多個(gè)在同一個(gè)類中的命名沖突,需要使用操作符來(lái)明確指定使用沖突方法中的哪一個(gè)。 概述 traits是PHP5.4新進(jìn)入的特性,其目的就是解決PHP的類不能多繼承的問(wèn)題。Traits不是類!不能被實(shí)例化。可以理解為一組能被不同的...

    imtianx 評(píng)論0 收藏0
  • PHP知識(shí)難點(diǎn)TOP3,挑戰(zhàn)一下你

    摘要:雖然容易入門,但是要想深入,還是有些路要走的,今天我們就來(lái)聊聊一些比較難理解的知識(shí)點(diǎn)。至于的第三種用法請(qǐng)看下面的。如果大家覺(jué)得這篇文章還不錯(cuò),請(qǐng)給予一個(gè)贊或者分享給你的好友,如果你有更多好的經(jīng)驗(yàn)或問(wèn)題,請(qǐng)?jiān)谠u(píng)論中和大家分享一下。 php雖然容易入門,但是要想深入,還是有些路要走的,今天我們就來(lái)聊聊php一些比較難理解的知識(shí)點(diǎn)。use php從5.3.0開(kāi)始引入了一個(gè)叫作命名空間的新特征...

    mdluo 評(píng)論0 收藏0
  • 解讀 thinkphp5 源碼(一):自動(dòng)加載

    摘要:索性讀一下它的源碼。行載入類載入類,這個(gè)類比較重要,實(shí)現(xiàn)了自動(dòng)加載。注冊(cè)錯(cuò)誤和異常處理機(jī)制加載慣例配置文件接下來(lái)我們看一下自動(dòng)加載的實(shí)現(xiàn)方法。所以借助此函數(shù)可以達(dá)到自動(dòng)加載。博客鏈接解讀源碼一自動(dòng)加載 聽(tīng)說(shuō) TP5 已經(jīng) RC4 了,曾經(jīng)在 RC3 的時(shí)候用它寫過(guò)一個(gè)小東西。官方說(shuō)從 RC4 以后改動(dòng)不是太大。索性讀一下它的源碼。然后順便記錄一下,如有錯(cuò)漏,請(qǐng)路過(guò)大神多多指正! 入口 ...

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

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

0條評(píng)論

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