大家好
大家都知道,PHP預設是不支援 多繼承的特性,多繼承的特性是什麼?
例如: C++的多繼承
struct base1{
int v1;
void foo1(int){}
}
struct base2{
int v2;
void foo2(int){}
}
struct derive: base1,base2{
};
所以其實會用到多繼承的語言並不多,就算是 JAVA 也不能直接多繼承,那如果在PHP想要在一個類別中使用多類別的函式該怎麼做比較好呢?
可以用 Traits
Traits 有點類似繼承的概念
基本使用方式:
<?php
trait testB {
function getB1()
{
echo 'B1';
}
}
class testA {
use testB;
}
$testAB = new testA;
$testAB->getB1(); //B1
?>
跟繼承一樣,如果母類別已經有命名,則會以母類別為準
<?php
trait testB {
function getB1()
{
echo 'B1';
}
}
class testA {
use testB;
function getB1()
{
echo 'AB1';
}
}
$testAB = new testA;
$testAB->getB1(); //AB1
?>
但是如果呼叫parent,則無法呼叫,會出現 has no parent 的 Fatal error
<?php
trait testB {
function getB1()
{
echo 'B1';
}
}
class testA {
use testB;
function getB1()
{
parent::getB1();
}
}
$testAB = new testA;
$testAB->getB1();//錯誤
?>
也就是說,Traits 是類似繼承,但是更好的說法是 "擴充",給大家參考囉,感恩。

留言板
歡迎留下建議與分享!希望一起交流!感恩!