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