大家好
大家都知道,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 是類似繼承,但是更好的說法是 "擴充",給大家參考囉,感恩。
留言板
歡迎留下建議與分享!希望一起交流!感恩!