本篇文章給大家分享的是有關trait如何在PHP中使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都網(wǎng)站制作、網(wǎng)站建設介紹好的網(wǎng)站是理念、設計和技術的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設計理念、多方位的設計風格、經(jīng)驗豐富的設計團隊。提供PC端+手機端網(wǎng)站建設,用營銷思維進行網(wǎng)站設計、采用先進技術開源代碼、注重用戶體驗與SEO基礎,將技術與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。carName}\n"; } } class Person { public function eat() { echo "eat\n"; } } class Student extends Person { use Drive; public function study() { echo "study\n"; } } $student = new Student(); $student->study(); $student->eat(); $student->driving(); ?>
輸出結(jié)果如下:
study eat driving trait
上面的例子中,Student類通過繼承Person,有了eat方法,通過組合Drive,有了driving方法和屬性carName。
如果Trait、基類和本類中都存在某個同名的屬性或者方法,最終會保留哪一個呢?
hello(); $student->driving(); ?>
輸出結(jié)果如下:
hello student driving from drive
因此得出結(jié)論:當方法或?qū)傩酝麜r,當前類中的方法會覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。
如果要組合多個Trait,通過逗號分隔 Trait名稱:
use Trait1, Trait2;
如果多個Trait中包含同名方法或者屬性時,會怎樣呢?答案是當組合的多個Trait包含同名屬性或者方法時,需要明確聲明解決沖突,否則會產(chǎn)生一個致命錯誤。
輸出結(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操作符來解決沖突,insteadof是使用某個方法替代另一個,而as是給方法取一個別名,具體用法請看代碼:
hello(); $Obj1->hi(); echo "\n"; $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關鍵詞還有另外一個用途,那就是修改方法的訪問控制:
Trait 也能組合Trait,Trait中支持抽象方法、靜態(tài)屬性及靜態(tài)方法,測試代碼如下:
sayHello(); $Obj->sayWorld(); echo $Obj->getWorld() . "\n"; HelloWorld::doSomething(); $Obj->inc(); $Obj->inc(); ?>
輸出結(jié)果如下:
Hello World get World Doing something 1 2
以上就是trait如何在PHP中使用,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。