php – 藉由安插特徵 (trait) 來修改父類別 (class) 的方法
當原有的程式碼 class My 繼承 class Base 的時候,若要改變已存在 class Base 的方法,可以藉由安插 trait 的方式,來修改 Base 的原有方法。
<?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 中添加了
use Action;
那麼 trait 的 Action::hello() 會覆蓋 class 的 Base::hello() 。如果在trait 的 Action::Hello() 要呼叫 class 的 Bass::Hello(),可以藉由
parent::hello()
來達到。這是因為 class My 繼承了 class Bass,中間安插了 trait Action。所以關係上來說是
class Base -> trait Action -> class My。
trait Action 的 parent 自然會是 class Base。