欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談PHP中的Trait使用方法

 更新時間:2019年03月22日 09:24:18   作者:牛牛的編程之路  
這篇文章主要介紹了PHP中的Trait使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

概述

在PHP中有一種代碼復用的技術, 因為單繼承的問題, 有些公共方法無法在父類中寫出, 而 Trait可以應對這種情況, 它可以定義一些復用的方法, 然后在你需要使用的類中將其引入即可.

剛開始的時候給我的感覺就是將trait代碼塊直接拿到類中的意思, 但后來我發(fā)現(xiàn), 我太天真了.

PHP中的Trait用法:

問題

當我第一次使用的時候, 因為之前一直使用抽象類, 或者定義內部對象, 然后調用內部對象中的方法, 所以我當時有了以下幾個問題:

1.能否引入多個, 如果可以的話, 同名方法如何處理

2.引入方法與現(xiàn)有方法重名時, 如何解決

3.能否定義抽象方法, 因為有些方法需要知道使用時的情況, 在抽象類中, 這種情況一般通過調用抽象方法來解決

4.能否定義字段

5.能否將字段或方法定義為靜態(tài)

6.能否對方法進行權限控制

答疑

1. Trait 可以引入多個, 多個trait中存在同名方法時, 需要指定使用哪個方法, 如下:

2.引入方法與現(xiàn)有方法重名時, 會優(yōu)先調用類中已定義的方法, 其優(yōu)先級順序為: 當前類方法>trait方法>父類方法

3. trait 中可以定義抽象方法, 語法與抽象類相同

4.trait 中可以定義字段, 語法與類相同

5. 可以定義靜態(tài)方法與靜態(tài)字段

6. 可以進行方法權限的控制

7. 另外, 在trait 代碼塊中還可以引入其他trait代碼塊, 語法與類中引入相同:

總結

至此, 我發(fā)現(xiàn)了一個新的問題, 這個 trait 與抽象類有什么區(qū)別? 說什么代碼復用, 這不就是多繼承么? trait與抽象類功能上有區(qū)別么? 抽象類能干的, trait都能干啊.

思前想后, 我覺得區(qū)別還是有的, 雖然說他們兩個看著很像, 功能相似, 但是正如抽象類與接口一樣(雖然這兩者不同, 接口不能定義方法), 接口更側重于定義一組公共的方法, 一種規(guī)范, 而抽象類則側重于將子類中公共的方法進行抽離, 提高代碼的復用.

trait 與抽象類的側重點也不相同

trait 側重于定義共用的代碼片段, 它并不管引用此片段的類是干什么的, 只要你需要, 就可以拿走去用, 簡單說就是 trait 并不約束類的類型, 而僅僅定義方法

抽象類則不同, 既然你繼承我, 那你干的事情肯定跟我是一樣的, 不能抽象類是去與數(shù)據(jù)庫交互的, 你子類去寫腳本了. 所以抽象類相對 trait 更側重于 類型的約束.

以上所述是小編給大家介紹的PHP中的Trait使用方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

最新評論