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,否則會破壞原有的物件導向程式結構。