摘要:命名沖突如果使用了多個(gè)并且多個(gè)中的命名有重復(fù),那么這個(gè)時(shí)候就會(huì)產(chǎn)生一個(gè)致命的錯(cuò)誤。避免的沖突引起的錯(cuò)誤。但是中的屬性跟方法,如果需要被外部的類(lèi)使用的話(huà),必須為,即使是也是不能被外部的類(lèi)所使用的。
使用多個(gè)Trait
trait Member { public function info() { echo "this is trait,"; } } trait Admin { public function show() { echo "this is admin,"; } } class ShowMember { use Member,Admin; } $Member = new ShowMember(); $Member->info(); $Member->show();
直接使用,逗號(hào)隔開(kāi),以上程序?qū)?huì)輸出this is trait,this is admin,。
命名沖突
如果使用了多個(gè)Trait,并且多個(gè)Trait中的命名有重復(fù),那么這個(gè)時(shí)候就會(huì)產(chǎn)生一個(gè)致命的錯(cuò)誤。為了正確的使用這些Trait,我們需要用insteadof來(lái)調(diào)用這些同名的方法。
trait Member { public function info() { echo "this is member info,"; } public function show() { echo "this is member show,"; } } trait Admin { public function info() { echo "this is admin info,"; } public function show() { echo "this is admin show,"; } } class ShowMember { use Member,Admin{ Member::info insteadof Admin;//使用 Member 的info 方法來(lái)替代 Admin 的info方法 Admin::show insteadof Member;//使用 Admin 的show 方法來(lái)替代 Member 的show方法 } } $Member = new ShowMember(); $Member->info(); $Member->show();
以上程序?qū)?huì)輸出this is member info,this is admin show,。這個(gè)時(shí)候使用了insteadof來(lái)聲明了,我需要使用哪個(gè)Trait中的方法。避免的沖突引起的錯(cuò)誤。
Trait的抽象成員
Trait和普通的類(lèi)一樣,也是成員變量的,也可以定義抽象方法來(lái)強(qiáng)制要求。
trait Member { public function info() { echo "this is member info,"; } abstract public function show(); } class ShowMember { use Member; public function show() { // TODO: Implement show() method. } } $Member = new ShowMember(); $Member->info();
Trait的靜態(tài)成員
Trait 同樣是可以靜態(tài)成員變量的
trait Member { public function info() { echo "this is member info,"; } public static $_a = 1; public function show() { echo self::$_a; } } class ShowMember { use Member; } $Member = new ShowMember(); $Member->show();//會(huì)輸出1 echo $Member::$_a;//也會(huì)輸出1
Trait的訪(fǎng)問(wèn)修飾符
上面很多例子可以看到 對(duì)Trait的方法,跟屬性都是加有 public訪(fǎng)問(wèn)修飾符,是不是就意味著,Trait也可以使用訪(fǎng)問(wèn)修飾符呢,答案是肯定的。但是Trait中的屬性跟方法,如果需要被外部的類(lèi)使用的話(huà),必須為public,即使是protected也是不能被外部的類(lèi)所使用的。那么如果我需要在外部的類(lèi)中對(duì)該方法進(jìn)行私有化怎么辦呢,下面來(lái)看一個(gè)列子
trait Member { public static function show() { echo "show"; } } class ShowMember { use Member{ show as private; //將Trait中的show方法私有化 } public function OutShow() { Member::show(); } } $Member = new ShowMember(); $Member->OutShow(); //$Member::show(); //這個(gè)時(shí)候直接調(diào)用 show方法那么會(huì)造成致命錯(cuò)誤
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29374.html
摘要:在閱讀文檔的時(shí)候看到一個(gè)類(lèi)是以聲明的。是一種代碼復(fù)用技術(shù),為的單繼承限制提供了一套靈活的代碼復(fù)用機(jī)制。下面把的代碼做一個(gè)修改以上代碼會(huì)輸出。可以看出優(yōu)先級(jí)的順序?yàn)椋?dāng)前類(lèi)的優(yōu)先級(jí)基類(lèi)。 ??在閱讀laravel文檔的時(shí)候看到一個(gè)類(lèi) 是以 Trait聲明的。平時(shí)在工作中從來(lái)沒(méi)有用過(guò),于是就去看了下官方文檔。原來(lái)這個(gè)類(lèi)早在php5.4.0就有了。可惜在項(xiàng)目中從來(lái)沒(méi)有用過(guò)。 ??Trait看...
摘要:新特性掌握的引入,可以擴(kuò)展的內(nèi)容,使在某種形式上實(shí)現(xiàn)了多重繼承,更加靈活不能被實(shí)例化示例代碼需要注意的是,的繼承順序來(lái)自當(dāng)前類(lèi)的成員覆蓋了的方法,而則覆蓋了被繼承的方法當(dāng)多個(gè)被同一個(gè)類(lèi)使用的時(shí)候,會(huì)出現(xiàn)方法沖突的情況,使用關(guān)鍵詞解決示 PHP 5.4新特性 掌握 traits trait的引入,可以擴(kuò)展class的內(nèi)容,使class在某種形式上實(shí)現(xiàn)了多重繼承,更加靈活 t...
摘要:關(guān)于作者程序開(kāi)發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事和前端開(kāi)發(fā),使用和,端使用混合式開(kāi)發(fā)。和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和類(lèi)相關(guān)典型問(wèn)題。它為傳統(tǒng)繼承增加了水平特性的組合也就是說(shuō),應(yīng)用的幾個(gè)之間不需要繼承。 關(guān)于作者 程序開(kāi)發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開(kāi)發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開(kāi)發(fā)。合適和...
摘要:個(gè)人網(wǎng)站最近剛寫(xiě)了一個(gè)手機(jī)在線(xiàn)播放的電影站使用日常手記更新使用的的查詢(xún)作用域的本地作用域去自定義可復(fù)用的約束集合,方便鏈?zhǔn)秸{(diào)用什么是本地查詢(xún)作用域本地作用域允許我們定義通用的約束集合以便在應(yīng)用中復(fù)用。 關(guān)于作者 程序開(kāi)發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開(kāi)發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開(kāi)發(fā)。合適和夠用是最完美的追求。 個(gè)人網(wǎng)站:...
摘要:說(shuō)明中經(jīng)常使用的反射特性來(lái)設(shè)計(jì)代碼,本文主要學(xué)習(xí)的反射特性,來(lái)提高寫(xiě)代碼時(shí)的設(shè)計(jì)質(zhì)量。提供一套檢測(cè)的兩個(gè)工具包和,類(lèi)似于探針一樣的東西來(lái)探測(cè)這些一等公民。限于篇幅,下篇再聊下反射。 說(shuō)明:Laravel中經(jīng)常使用PHP的反射特性來(lái)設(shè)計(jì)代碼,本文主要學(xué)習(xí)PHP的反射特性,來(lái)提高寫(xiě)代碼時(shí)的設(shè)計(jì)質(zhì)量。PHP提供一套檢測(cè)class, interface, trait, property, me...
閱讀 1456·2021-09-02 13:57
閱讀 1870·2019-08-30 15:55
閱讀 2407·2019-08-30 15:54
閱讀 2241·2019-08-30 15:44
閱讀 2733·2019-08-30 13:18
閱讀 480·2019-08-30 13:02
閱讀 628·2019-08-29 18:46
閱讀 1665·2019-08-29 11:25