PHP系列 - 5: 類別與介面

PHP系列 - 5: 類別與介面

更新於 發佈於 閱讀時間約 4 分鐘

今天我們將介紹類別與介面的相關內容。雖然(我認為)這些知識對於一般初階工程師的幫助不大,但對於資深工程師而言卻是必不可少的。了解它們之間的差異,有助於設計更優雅的架構並保持代碼的整潔。話不多說,我們開始吧!

Class 與 Abstract Class

類別(Class)是 PHP 中最基礎的型別之一,主要用來封裝函數和變數,並符合物件導向的三大要素:封裝、繼承以及多型。

抽象類別(Abstract Class)是一種經過抽象化的類別,與一般類別一樣可以定義屬性與常數,但本身無法被實例化。需要注意的是,抽象類別可以實作方法的內容,但不可以實作抽象方法

舉例來說:

abstract class myClass
{
protected $myattr; // 宣告屬性

public function sayHi() // 實作方法的內容
{
return 'Hi';
}

abstract public function sayHi2() // 不可以這樣做!不可以實作抽象方法
{
//return 'Hi';
}
}

Interface 與 Traits

介面(Interface)主要用於規範需要實作的方法,從而統一繼承的類別架構。在介面中,所有的方法都是公開的(public),且方法的內容是空的,不能包含實作。繼承的類別必須全部實作介面所定義的所有方法,不能遺漏。這種統一的規範有助於日後的維護與擴展。

而 Traits 與介面最大的不同在於,使用 Traits 時,我們不僅可以直接實作方法內容,還可以選擇只使用其中的特定方法。此外,Traits 裡的方法可以是公開的也可以是私有的,並沒有強制規範。

總結來說,雖然 Traits 和介面一樣可以在類別中繼承/使用多個,但整體來看,Traits 反而更接近於類別與抽象類別的概念。

最後做個簡單比較

類別 Class抽象類別 Abstract Class介面InterfaceTraits

raw-image


參考資料:

  1. https://ithelp.ithome.com.tw/m/articles/10267890
  2. https://blog.liu-yucheng.com/2023/08/19/abstract_vs_interface/index.html
  3. https://kejyuntw.gitbooks.io/php-learning-notes/content/class/class-abstract-interface-compare.html
  4. https://ithelp.ithome.com.tw/m/articles/10133226
  5. https://www.php.net/manual/zh/language.oop5.traits.php
avatar-img
林柏宇的沙龍
2會員
40內容數
test
留言
avatar-img
留言分享你的想法!
林柏宇的沙龍 的其他內容
本文專注於策略模式,旨在通過將函數封裝為策略來簡化程式碼的維護與測試。隨著專案規模的擴大,重構的重要性顯著提高,而策略模式能有效減少程式碼中的條件語句,提升可讀性與易測性。透過範例介紹策略模式在加減乘除計算中的應用,並討論其優點與實作注意事項,幫助工程師更有效地應用此模式以應對程式碼維護挑戰。
本文介紹了一些在 PHP 中常用的函數,如匿名函數、isset()、empty() 和 is_null(),並解釋了可變變數、引用賦值及 array 的建立方法。此外,還提到 PHP 8.0 中的新特性 Nullsafe,幫助開發者更方便地處理空值判斷。
在本文中,我們將介紹PHP中的各種屬性與方法,包括訪問修飾符、方法修飾符,以及魔術方法的使用。你將學習到public、private和protected的區別,以及static、final、abstract等方法的特點。同時,我們會簡要提到PHP 8.1中新增的readonly屬性修飾符及其用途。
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。
本文專注於策略模式,旨在通過將函數封裝為策略來簡化程式碼的維護與測試。隨著專案規模的擴大,重構的重要性顯著提高,而策略模式能有效減少程式碼中的條件語句,提升可讀性與易測性。透過範例介紹策略模式在加減乘除計算中的應用,並討論其優點與實作注意事項,幫助工程師更有效地應用此模式以應對程式碼維護挑戰。
本文介紹了一些在 PHP 中常用的函數,如匿名函數、isset()、empty() 和 is_null(),並解釋了可變變數、引用賦值及 array 的建立方法。此外,還提到 PHP 8.0 中的新特性 Nullsafe,幫助開發者更方便地處理空值判斷。
在本文中,我們將介紹PHP中的各種屬性與方法,包括訪問修飾符、方法修飾符,以及魔術方法的使用。你將學習到public、private和protected的區別,以及static、final、abstract等方法的特點。同時,我們會簡要提到PHP 8.1中新增的readonly屬性修飾符及其用途。
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。