您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何理解php是多繼承還是單繼承”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解php是多繼承還是單繼承”吧!
php是單繼承。php是不支持多繼承的,但是php可以通過使用interface或者trait實現多繼承,如【interface test1 {public function connect();}interface test2 ...】。
本文操作環境:windows10系統、php 7、thinkpad t480電腦。
php是單繼承還是多繼承?可能你也被這個問題困惑很久了吧。首先,PHP是單繼承,他是不支持多繼承的。面向對象的特點是封裝、繼承、多態。這里的繼承是指類與類之間的繼承關系,可以使用關鍵字extends實現,這里只可以繼承一個類。
那么,php是否可以實現多繼承呢?答案是可以的。
php可以用兩種方式實現多繼承。一個是使用interface實現。還有一個就是使用trait實現。
第一種:關于使用interface實現,它的原理就是一個類可以實現多個接口,我們可以定義多個接口類,如下:
interface test1 { public function connect(); }
interface test2 { public function contact(); }
一個類實現多個接口:
class MyClass implements test1,test2 { public function connect() { echo "test1"; } public function contact() { echo "test2"; } }
第二種:使用trait實現。其實trait并不算是多繼承,應該叫做類似多繼承的功能。
什么是trait呢?
答:看上去既像類又像接口,其實都不是,Trait可以看做類的部分實現,可以混入一個或多個現有的PHP類中,其作用有兩個:表明類可以做什么;提供模塊化實現。Trait是一種代碼復用技術,為PHP的單繼承限制提供了一套靈活的代碼復用機制。
//基本類 class basicTest{ public function test(){ echo "hello,world\n"; } } //traitOne trait traitOne{ public function test(){ echo "this is trait one"; } public function testOne(){ echo "one"; } } //traitTwo trait traitTwo{ // public function test(){ // echo "this is trait two!"; // } public function testTwo(){ echo "Two"; } } //繼承基本類,并use trait class myCode extends basicTest{ use traitOne,traitTwo; public function test(){ echo "hehaha!!"; } } $obj = new myCode(); $obj->testTwo();
注意:
優先級:自身方法>trait的方法>繼承的方法(就是這樣子的。)
如果我們打開上述代碼中的注釋,會報錯,因為兩個trait中的方法重名了。
如何解決trait中方法重名的情況?
//使用demo1和demo2的方法,但并不是導入命名空間 //demo1和demo2種都有hello方法 use Demo1,Demo2{ //將Demo1的hello方法替換Demo2的hello方法 Demo1::hello insteadof Demo2; //給Demo2的hello方法起別名 Demo2::hello as Demo2Hello; } //下方調用的時候 return $this->hello(); // 使用demo1的方法 return $this->Demo2Hello(); //使用demo2的方法
感謝各位的閱讀,以上就是“如何理解php是多繼承還是單繼承”的內容了,經過本文的學習后,相信大家對如何理解php是多繼承還是單繼承這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。