摘要:什么是自起,實(shí)現(xiàn)了一種代碼復(fù)用的方法,稱為。是為了單繼承語言而準(zhǔn)備的一種代碼復(fù)用機(jī)制。從基類繼承的成員會被插入的成員所覆蓋。中使用先將其重新命名,然后將新命名方法設(shè)置為私有,原中的方法可以正常訪問。就是很好用的啦轉(zhuǎn)載地址代碼復(fù)用的方式
什么是 Trait?
自 PHP 5.4.0 起,PHP 實(shí)現(xiàn)了一種代碼復(fù)用的方法,稱為 Trait。
Trait 是為了單繼承語言而準(zhǔn)備的一種代碼復(fù)用機(jī)制。
Trait 和 Class 相似,它為傳統(tǒng)的繼承增加了水平的特性的組合,多個無關(guān)的 Class 之間不需要互相繼承
Trait 使得無關(guān)的 Class 可以使用相同的屬性和方法。
簡單使用
echoHello(); echo $one->index(); echo $two->echoHello();
結(jié)果輸出 Hello Trait index Hello Trait。
從基類繼承的成員會被 Trait 插入的成員所覆蓋。優(yōu)先順序是來自當(dāng)前類的成員覆蓋了 Trait 的方法,而 Trait 則覆蓋了被繼承的方法。
echoHello(); echo $two->echoHello(); echo $base->echoHello();
結(jié)果輸出 Hello One Hello Trait Hello Base。
class one 示例覆蓋基類和 Trait Test,說明當(dāng)前類的方法優(yōu)先級高于他們。
class Two 示例覆蓋基類,Trait 的有優(yōu)先級高于繼承的基類。
class Base 示例覆蓋 Trait Test,說明當(dāng)前類的方法優(yōu)先級高于 Trait。
通過逗號分隔,在 use 聲明列出多個 trait,可以都插入到一個類中。
echoHello(); echo $one->echoWord();
結(jié)果輸出 Hello word !。
如果兩個 Trait 都插入了一個同名的方法,如果沒有明確解決沖突將會產(chǎn)生一個致命錯誤。
echoTest(); echo $one->echoWord(); echo $one->echoHello();
輸出結(jié)果:Hello Test word Test Hello TestTwo。
使用 as 作為別名,即 Test::echoHello as echoTest; 輸出 Trait Test 中的 echoHello.
使用 insteadof 操作符用來排除掉其他 Trait,即 Test::echoWord insteadof TestTwo; 輸出的是 word Test,使用 Trait Test 中的 echoWord
修改 方法的控制權(quán)限
echoHello();
輸出結(jié)果 Hello。
class one 中使用 as 將 echoHello 設(shè)為私有,則通過 class one 不能訪問 echoHello。
class two 中使用 as 先將其重新命名,然后將新命名方法設(shè)置為私有,原 Trait 中的方法可以正常訪問。
Trait 中還可以像類一樣定義屬性。就是很好用的啦!
轉(zhuǎn)載地址 PHP 代碼復(fù)用的方式
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26095.html
摘要:和組合的語義定義了一種減少復(fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問題。隊列的目的是將耗時的任務(wù)延時處理,比如發(fā)送郵件,從而大幅度縮短請求和相應(yīng)的時間。同樣的道理,根據(jù)引入不同的來完成對應(yīng)的功能。 showImg(https://segmentfault.com/img/remote/1460000010868178); Trait 概念 在常規(guī)的 PHP 開發(fā)中,我們都習(xí)慣于先編寫一...
摘要:是一種為類似的單繼承語言而準(zhǔn)備的代碼復(fù)用機(jī)制。因為中的變量環(huán)境是基于函數(shù)的,所以會輸出博客鏈接代碼復(fù)用機(jī)制,本文后續(xù)如有更新將會在博客更新。 提到 php 的代碼復(fù)用,我們可能第一時間會想到繼承,但是這種單繼承語言一旦派生的子類過多,那么會產(chǎn)生一系列的問題,比如依賴父類、耦合性太大、破壞了類的封裝性。那么有沒有更好的方法來實(shí)現(xiàn)代碼復(fù)用呢? 自 PHP 5.4.0 起,PHP 實(shí)現(xiàn)了另外...
摘要:關(guān)于作者程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事和前端開發(fā),使用和,端使用混合式開發(fā)。和組合的語義定義了一種減少復(fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問題。它為傳統(tǒng)繼承增加了水平特性的組合也就是說,應(yīng)用的幾個之間不需要繼承。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和...
摘要:實(shí)現(xiàn)異步的方式有哪些提供了一些異步方法那它們底層是用哪種方式實(shí)現(xiàn)的呢實(shí)現(xiàn)異步的方式有線程方式進(jìn)程方式復(fù)用線程方式和進(jìn)程方式類似有異步請求時開一個線程或者進(jìn)程獲取到數(shù)據(jù)后線程間可以直接共享數(shù)據(jù)進(jìn)程間可以通過進(jìn)程通信機(jī)制,如共享內(nèi)存管道等方式進(jìn) 實(shí)現(xiàn)異步的方式有哪些? swoole提供了一些異步方法, 那它們底層是用哪種方式實(shí)現(xiàn)的呢? 實(shí)現(xiàn)異步的方式有: 線程方式 進(jìn)程方式 IO復(fù)用 ...
閱讀 3195·2023-04-26 02:33
閱讀 3133·2023-04-25 21:33
閱讀 940·2021-09-02 09:56
閱讀 2955·2019-08-30 15:44
閱讀 2485·2019-08-30 13:15
閱讀 1066·2019-08-30 13:04
閱讀 1670·2019-08-29 15:09
閱讀 4009·2019-08-26 18:26