今天我們將介紹類別與介面的相關內容。雖然(我認為)這些知識對於一般初階工程師的幫助不大,但對於資深工程師而言卻是必不可少的。了解它們之間的差異,有助於設計更優雅的架構並保持代碼的整潔。話不多說,我們開始吧!
類別(Class)是 PHP 中最基礎的型別之一,主要用來封裝函數和變數,並符合物件導向的三大要素:封裝、繼承以及多型。
抽象類別(Abstract Class)是一種經過抽象化的類別,與一般類別一樣可以定義屬性與常數,但本身無法被實例化。需要注意的是,抽象類別可以實作方法的內容,但不可以實作抽象方法。
舉例來說:
abstract class myClass
{
protected $myattr; // 宣告屬性
public function sayHi() // 實作方法的內容
{
return 'Hi';
}
abstract public function sayHi2() // 不可以這樣做!不可以實作抽象方法
{
//return 'Hi';
}
}
介面(Interface)主要用於規範需要實作的方法,從而統一繼承的類別架構。在介面中,所有的方法都是公開的(public),且方法的內容是空的,不能包含實作。繼承的類別必須全部實作介面所定義的所有方法,不能遺漏。這種統一的規範有助於日後的維護與擴展。
而 Traits 與介面最大的不同在於,使用 Traits 時,我們不僅可以直接實作方法內容,還可以選擇只使用其中的特定方法。此外,Traits 裡的方法可以是公開的也可以是私有的,並沒有強制規範。
總結來說,雖然 Traits 和介面一樣可以在類別中繼承/使用多個,但整體來看,Traits 反而更接近於類別與抽象類別的概念。
類別 Class抽象類別 Abstract Class介面InterfaceTraits