本篇文章給大家?guī)淼膬?nèi)容是關(guān)于PHP實(shí)現(xiàn)多繼承的trait語法的介紹(代碼示例),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
PHP沒有多繼承的特性。即使是一門支持多繼承的編程語言,我們也很少會(huì)使用這個(gè)特性。在大多數(shù)人看來,多繼承不是一種好的設(shè)計(jì)方法。
但是開發(fā)中用到多繼承該怎么辦呢?
下面介紹一下使用"trait"來實(shí)現(xiàn)php中多繼承的問題。
自PHP5.4開始,php實(shí)現(xiàn)了代碼復(fù)用的方法"trait"語法。
Trait是為PHP的單繼承語言而準(zhǔn)備的一種代碼復(fù)用機(jī)制。為了減少單繼承的限制,是開發(fā)在不同結(jié)構(gòu)層次上去復(fù)用method,Trait 和 Class 組合的語義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題。
需要注意的是,從基類繼承的成員會(huì)被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當(dāng)前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。
先來個(gè)例子:
- trait TestOne{
- public function test()
- {
- echo "This is trait one <br/>";
- }
- }
- trait TestTwo{
- public function test()
- {
- echo "This is trait two <br/>";
- }
- public function testTwoDemo()
- {
- echo "This is trait two_1";
- }
- }
- class BasicTest{
- public function test(){
- echo "hello world/n";
- }
- }
- class MyCode extends BasicTest{
- //如果單純的直接引入,兩個(gè)類中出現(xiàn)相同的方法php會(huì)報(bào)出錯(cuò)
- //Trait method test has not been applied, because there are collisions with other trait
- //methods on MyCode
- //use TestOne,TestTwo;
- //怎么處理上面所出現(xiàn)的錯(cuò)誤呢,我們只需使用insteadof關(guān)鍵字來解決方法的沖突
- use TestOne,TestTwo{
- TestTwo::test insteadof TestOne;
- }
- //Vevb.com
- }
- $test = new MyCode();
- $test->test();
- $test->testTwoDemo();
運(yùn)行結(jié)果:
This is trait two
This is trait two_1
以上就是PHP實(shí)現(xiàn)多繼承的trait語法的介紹(代碼示例)的詳細(xì)內(nèi)容。
|
新聞熱點(diǎn)
疑難解答