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。


發表迴響