8.10 特殊物件導向:Trait

  PHP 的 Class 與 Interface 語法上和 Java 有些類似,也都是使用 extends 繼承 Class、使用 implements 繼承 Interface,故在此不多做敘述。本文主要要討論的是 PHP 特有的 Trait。簡單地說,Trait 本質上就是「藉助程式語言的複製貼上 (language assisted copy and paste)」,請參考以下範例:
interface Animal {
    public function say();
    public function eat($food);
}

trait AnimalEatTrait {
    protected $energy = 0;
    public function eat($food) {
        $this -> energy += 100;
        echo ucfirst($food) . " eaten.<br>\n";
    }
}

class Dog implements Animal {
    use AnimalEatTrait;
    public function say() {
        echo "Woof!<br>\n";
    }
}

class Cat implements Animal {
    use AnimalEatTrait;
    public function say() {
        echo "Meow!<br>\n";
    }
}
  Dog 與 Cat 都擁有同樣的 $energy 屬性與 eat() 方法,故可用 Trait 來促進程式碼的重覆使用。不過千萬要記得,不要濫用 Trait,否則會破壞原有的物件導向程式結構。