PHP實現多繼承

題問php是否支持多繼承?php

答案:不能夠,只支持單繼承。模塊化

如何實現多繼承呢?oop

答案:能夠使用 interfacetrait 實現 。網站

interface這裏咱們就不作過多的說明了,它的原理就是一個類能夠實現多個接口。下面這段代碼就可以說明。this

interface test1{
    public function connect();
}

interface test2{
    public function contact();
}

// 類能夠同時實現多個接口
class myCode implements test1,test2{
    public function connect(){
    echo "test1!";
    }
    public function contact(){
    echo "test2!":
    }
}


下面咱們重點討論一下trait實現多繼承(其實也不叫多繼承,應該叫相似多繼承的功能)
那什麼是trait呢?
答:看上去既像類又像接口,其實都不是,Trait能夠看作類的部分實現,能夠混入一個或多個現有的PHP類中,其做用有兩個:代表類能夠作什麼;提供模塊化實現。Trait是一種代碼複用技術,爲PHP的單繼承限制提供了一套靈活的代碼複用機制。
那麼怎麼實現trait呢?看下面代碼:

  //基本類
  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<br />";
    }
  }
  //traitTwo
  trait traitTwo{
    // public function test(){
      // echo "this is trait two!";
    // }
    public function testTwo(){
      echo "Two<br />";
    }
   }
  //繼承基本類,並use trait
  class myCode extends basicTest{
    use traitOne,traitTwo;
    public function test(){
      echo "hehaha!!<br />";
    }
  }

  $obj = new myCode();
  $obj->testTwo();spa

  注意:.net

優先級:自身方法>trait的方法>繼承的方法(就是這樣子的。)若是咱們打開上述代碼中的註釋,會報錯,由於兩個trait中的方法重名了。解決辦法及trait詳情,能夠參考如下網站:https://php.net/manual/zh/language.oop5.traits.php
相關文章
相關標籤/搜索