蕭峰與郭靖教你學會PHP的Trait

2021-09-16 14:27:26 字數 2319 閱讀 7001

在php5.4之前,php物件導向需要復用**的方式是使用類的繼承。但php只支援單繼承,在應對較複雜的業務邏輯中,單繼承就顯得捉襟見肘了。

如以下應用場景:

class person 

}class guojing extends person

}class xiaofeng extends person

}

guojing 類 與 xiaofeng 類都繼承於person,都有共同的 kungfu 方法,顯然,我們不能將這個 kungfu 方法寫到 person 類,不然隨便乙個路人甲繼承了 person 類,就擁有了 kungfu 技能。

用trait就能解決此問題:

<?php 

trait tool

}class person

}class guojing extends person

class xiaofeng extends person

$guojing = new guojing();

$xiaofeng = new xiaofeng();

$guojing->kungfu();

$xiaofeng->kungfu();

結果如下:

降龍十八掌!

降龍十八掌!

如果trait類、基類和本類中的方法或屬性同名,最終會以哪個為準?

<?php 

trait tool

}class person

public function kungfu()

}class guojing extends person

}class xiaofeng extends person

$guojing = new guojing();

$guojing->kungfu();

結果:

除了降龍十八掌,我還懂九陰真經!
注釋本類的 kungfu 方法,得出的結果是:

降龍十八掌!
當方法或屬性同名時,當前類中的方法會覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。

多個trait有同名的方法/屬性時,會報錯:

<?php 

trait tool

}trait skill

}class guojing

$guojing = new guojing();

$guojing->kungfu();

解決方式:使用insteadof和as來解決衝突

<?php 

trait tool

}trait skill

}class xiaofeng

}$xiaofeng = new xiaofeng();

$xiaofeng->ability();

渾厚的內力修為
<?php 

trait tool

}class xiaofeng

}$xiaofeng = new xiaofeng();

$xiaofeng->ability();

報錯:

fatal error: uncaught error: call to protected method xiaofeng::ability() from context
trait也能組合trait,同時,trait中支援抽象方法、靜態屬性、靜態方法。

<?php 

trait tool

}trait feature

}class xiaofeng

}$xiaofeng = new xiaofeng();

$xiaofeng->kungfu();

xiaofeng::character();

$xiaofeng->dream();

結果:

降龍十八掌!

磊落豪雄

弄清楚:我是誰?

原始碼倉庫鏈

我的讀書筆記 峰與谷

斯賓塞 詹森經典作品 峰與谷 一 在我們的工作和生活中,每個人都會遭遇高峰和低谷,這是人生的常態。二 高峰和低谷不僅是外部的順境和逆境,更是你內心深處的感受和變化。三 峰谷相連不分。今日逆境之智,換得他日逆境 今日逆境之智,換得他日順境。生活不可能是一成不變的,而且,一成不變的生活會讓你感到枯燥,讓...

千峰筆記 遞迴 棧與佇列 目錄遍歷

遞迴呼叫 乙個函式,呼叫了自身,稱為遞迴呼叫 遞迴函式 乙個會呼叫自身的函式 凡是迴圈能幹的事,遞迴都能幹 方式 寫出臨界條件 找這一次和上一次的關係 假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次的結果 求和def sum1 n sum 0 for x in range 1,n 1 s...

隨手記 共振峰的特性 與音高pitch

人聲的共振峰有乙個有意思的特性,每乙個母音都有對應的乙個共振峰,而且這個共振峰不隨音高 pitch 的改變而改變。我們可以用不同的音高去發出相同乙個母音。此時聲帶振動的頻率改變,但是共鳴腔不變。也可以用相同的音高去發出不同的母音,此時聲帶振動的頻率不變而共鳴腔的形狀改變。也就是說,無論你聲音高低,只...