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