您好,登錄后才能下訂單哦!
這篇文章主要為大家詳細介紹了PHP實現(xiàn)多繼承的trait語法,文中示例代碼介紹的非常詳細,零基礎(chǔ)也能參考此文章,感興趣的小伙伴們可以參考一下。
PHP沒有多繼承的特性。即使是一門支持多繼承的編程語言,我們也很少會使用這個特性。在大多數(shù)人看來,多繼承不是一種好的設(shè)計方法。
但是開發(fā)中用到多繼承該怎么辦呢?
下面介紹一下使用"trait"來實現(xiàn)php中多繼承的問題。
自PHP5.4開始,php實現(xiàn)了代碼復用的方法"trait"語法。
Trait是為PHP的單繼承語言而準備的一種代碼復用機制。為了減少單繼承的限制,是開發(fā)在不同結(jié)構(gòu)層次上去復用method,
Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題。
需要注意的是,從基類繼承的成員會被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。
先來個例子:
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{ //如果單純的直接引入,兩個類中出現(xiàn)相同的方法php會報出錯 //Trait method test has not been applied, because there are collisions with other trait //methods on MyCode //use TestOne,TestTwo; //怎么處理上面所出現(xiàn)的錯誤呢,我們只需使用insteadof關(guān)鍵字來解決方法的沖突 use TestOne,TestTwo{ TestTwo::test insteadof TestOne; } } $test = new MyCode(); $test->test(); $test->testTwoDemo();
運行結(jié)果:
This is trait two This is trait two_1
以上就是PHP實現(xiàn)多繼承的trait語法的內(nèi)容,代碼詳細清楚,如果在日常工作遇到這個問題,希望你能通過這篇文章解決問題。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。