首頁  >  文章  >  後端開發  >  php是多繼承還是單繼承

php是多繼承還是單繼承

王林
王林原創
2021-10-18 17:51:233103瀏覽

php是單繼承。 php是不支援多重繼承的,但是php可以透過使用interface或trait實現多重繼承,如【interface test1 {public function connect();}interface test2 ...】。

php是多繼承還是單繼承

本文操作環境: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是多繼承還是單繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn