php – 藉由安插特徵 (trait) 來修改父類別 (class) 的方法
當原有的程式碼 class My 繼承 class Base 的時候,若要改變已存在 class Base 的方法,可以藉由安插 trait 的方式,來修改 Base 的原有方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php class Bass { public function hello() { return "Hello World"; } } trait Action { public function hello() { return "Action! " . parent::hello(); } } class My extends Bass { // 一旦添加了特徵 Action ,那麼 Base::hello() 將會被覆蓋。 use Action; public function say() { return $this->hello(); } } $My = new My; echo $My->say(); // Action! Hello World |
我們在 class My 中添加了
1 2 3 |
use Action; |
那麼 trait 的 Action::hello() 會覆蓋 class 的 Base::hello() 。如果在trait 的 Action::Hello() 要呼叫 class 的 Bass::Hello(),可以藉由
1 2 3 |
parent::hello() |
來達到。這是因為 class My 繼承了 class Bass,中間安插了 trait Action。所以關係上來說是
class Base -> trait Action -> class My。
trait Action 的 parent 自然會是 class Base。