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會員
28內容數
test
留言0
查看全部
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 的重要性,幫助開發者有效改善用戶下載體驗。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。