PHP是不支持多繼承的,那么如何實現多繼承呢?
可以使用interface或trait 實現
interface這里我們就不做過多的說明了,它的原理就是一個類可以實現多個接口。下面這段代碼就能夠說明。
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
";
}
}
//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中的方法重名了。