PHP中trait使用方法介紹_第1頁
PHP中trait使用方法介紹_第2頁
PHP中trait使用方法介紹_第3頁
PHP中trait使用方法介紹_第4頁
PHP中trait使用方法介紹_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——PHP中trait使用方法介紹PHP中trait使用方法介紹

PHP中使用trait關(guān)鍵字是為了解決一個(gè)類既想集成基類的屬性和方法,又想擁有別的基類的.方法,而trait一般處境下是和use搭配使用的。本文是我探尋整理的關(guān)于PHP中trait使用方法介紹,感興趣的摯友一起學(xué)習(xí)吧!!想了解更多相關(guān)信息請持續(xù)關(guān)注我們我!

?php

traitDrive

public$carName=trait;

publicfunctiondriving

echodriving$this-carName\n;

classPerson

publicfunctioneat

echoeat\n;

classStudentextendsPerson

useDrive;

publicfunctionstudy

echostudy\n;

$student=newStudent;

$student-study;

$student-eat;

$student-driving;

?

輸出結(jié)果如下:

study

eat

drivingtrait

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

假設(shè)Trait、基類和本類中都存在某個(gè)同名的屬性或者方法,最終會留存哪一個(gè)呢?

?php

traitDrive

publicfunctionhello

echohellodrive\n;

publicfunctiondriving

echodrivingfromdrive\n;

classPerson

publicfunctionhello

echohelloperson\n;

publicfunctiondriving

echodrivingfromperson\n;

classStudentextendsPerson

useDrive;

publicfunctionhello

echohellostudent\n;

$student=newStudent;

$student-hello;

$student-driving;

?

輸出結(jié)果如下:

hellostudent

drivingfromdrive

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

假設(shè)要組合多個(gè)Trait,通過逗號分隔Trait名稱:

useTrait1,Trait2;

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

?php

traitTrait1

publicfunctionhello

echoTrait1::hello\n;

publicfunctionhi

echoTrait1::hi\n;

traitTrait2

publicfunctionhello

echoTrait2::hello\n;

publicfunctionhi

echoTrait2::hi\n;

classClass1

useTrait1,Trait2;

?

輸出結(jié)果如下:

代碼如下:

PHPFatalerror:Traitmethodhellohasnotbeenapplied,becausetherearecollisionswithothertraitmethodsonClass1in~/php54/trait_3.phponline20

使用insteadof和as操作符來解決沖突,insteadof是使用某個(gè)方法替代另一個(gè),而as是給方法取一個(gè)別名,概括用法請看代碼:

?php

traitTrait1

publicfunctionhello

echoTrait1::hello\n;

publicfunctionhi

echoTrait1::hi\n;

traitTrait2

publicfunctionhello

echoTrait2::hello\n;

publicfunctionhi

echoTrait2::hi\n;

classClass1

useTrait1,Trait2

Trait2::helloinsteadofTrait1;

Trait1::hiinsteadofTrait2;

classClass2

useTrait1,Trait2

Trait2::helloinsteadofTrait1;

Trait1::hiinsteadofTrait2;

Trait2::hiashei;

Trait1::helloashehe;

$Obj1=newClass1;

$Obj1-hello;

$Obj1-hi;

echo\n;

$Obj2=newClass2;

$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è)用途,那就是修改方法的訪問操縱:

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

?php

traitHello

publicfunctionsayHello

echoHello\n;

traitWorld

useHello;

publicfunctionsayWorld

echoWorld\n;

abstractpublicfunctiongetWorld;

publicfunctioninc

static$c=0;

$c=$c+1;

echo$c\n;

publicstaticfunctiondoSomething

echoDoingsomething\n;

classHelloWorld

useWorld;

publicfunctiongetWorld

returngetWorld;

$Obj=newHelloWorld;

$Obj-sayHello;

$Obj-sayWorld;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論