PHP系列 - 2: 屬性、方法與魔術方法

更新 發佈閱讀 5 分鐘

這次的單元我來稍微介紹一下 PHP 裡面常看到的一些屬性與方法。

訪問修飾符 access modifiers

訪問修飾符用於控制類屬性和方法的可見性。在 PHP 中,除了預設的 default,還有三種修飾符:publicprivateprotected

  1. public:訪問權限最寬鬆,可以在類內部、類外部以及繼承的子類中訪問。
  2. private:訪問權限最嚴格,只能在類內部訪問。用於封裝數據,保護類內部的實現。
  3. protect:訪問權限介於中間,類內部和繼承的子類中都可以訪問,但在類外部無法訪問。

方法修飾符

方法修飾符總共有三種,分別為 staticfinalabstract

  1. static:靜態資源,在類別加載時就分配空間,所有實例共用一份。使用靜態方法時,只需透過 類名::屬性類名::方法名() 來調用。
    • 靜態屬性:表示此屬性屬於類別本身。
    • 靜態方法:表示此方法屬於類別本身,而非類別的實例,因此只能訪問類別的靜態方法。
  2. final:最終資源,表示該方法無法被改寫或繼承,常用於防止子類修改其行為。
  3. abstract:抽象資源,表示該類別無法被實例化。通常用於定義必須的屬性和方法,以限制子類必須實現這些屬性和方法。後續章節會詳細介紹。

readonly

readonly 是從 PHP 8.1 開始新增的屬性修飾符,用於使屬性無法被修改,但仍然可以被訪問。這個修飾符的主要用途是確保屬性在創建後不會被更改,讓使用者可以放心引用,而不必擔心該值在其他地方被調整。

魔術方法

PHP 提供了多種魔術方法,這些方法通常以 __ 開頭。以下是幾種常用的魔術方法介紹:

__construct()

當創建目標物件時,可以使用構造函數來定義一些初始化的內容,確保在物件構建時同時完成初始化。

__get()、__set()、__isset()

這三個方法分別用於獲取、設置和確認屬性是否已被設置的功能。

__call()

此方法主要用於檢查被呼叫的方法是否存在於該類別中。

__invoke()

這個魔術方法的使用頻率較高,但對初學者來說可能較難理解。簡單來說,__invoke() 可以讓物件被視作函數來使用。一般情況下,當我們實例化一個類別為物件時,只能呼叫該類別本身所包含的函數,而 __invoke() 則允許我們直接將這個類別作為函數使用。你可以參考這篇文章中的舉例:PHP 魔術方法|三分鐘看懂 __invoke 用法。在實作中,尤其是在 MVC 架構中,Controller 通常負責一件特定的事情,並使用 __invoke() 來實現 RESTful API 架構。


對於初學者來說,魔術方法可能是最難掌握的概念之一。由於魔術方法不具備一般函數的名稱,因此在未經過專門學習的情況下,直接在程式碼中看到這些方法時,想要使用 IDE 的 declaration 功能查詢內容往往會失敗(這取決於 IDE 的功能強弱)。因此,每次遇到魔術方法時,都可以視作一次學習經驗。

參考資料:

  1. https://www.cnblogs.com/SharkJiao/p/14117095.html
  2. https://www.ithome.com.tw/news/148077
  3. https://php.watch/versions/8.1/readonly
  4. https://www.cnblogs.com/ttaylor/p/15269534.html
  5. https://laravel.com/docs/9.x/controllers#single-action-controllers
  6. https://driesvints.com/blog/the-beauty-of-single-action-controllers/
  7. https://devindeving.blogspot.com/2021/12/php-magic-method-invoke.html
留言
avatar-img
林柏宇的沙龍
2會員
57內容數
test
林柏宇的沙龍的其他內容
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
本文介紹了一些在 PHP 中常用的函數,如匿名函數、isset()、empty() 和 is_null(),並解釋了可變變數、引用賦值及 array 的建立方法。此外,還提到 PHP 8.0 中的新特性 Nullsafe,幫助開發者更方便地處理空值判斷。
Thumbnail
本文介紹了一些在 PHP 中常用的函數,如匿名函數、isset()、empty() 和 is_null(),並解釋了可變變數、引用賦值及 array 的建立方法。此外,還提到 PHP 8.0 中的新特性 Nullsafe,幫助開發者更方便地處理空值判斷。
Thumbnail
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
Thumbnail
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
$GLOBALS:包含目前執行PHP程式的所有全域變數,其鍵值是全域變數名稱。 $_SERVER:Web伺服器的變數,屬於目前PHP程式執行環境的相關資料。 $_GET:儲存HTTP GET方法傳入PHP程式表單欄位值或URL參數的結合陣列,其鍵值是欄位或參數名稱。 $_POST:儲存HT
Thumbnail
$GLOBALS:包含目前執行PHP程式的所有全域變數,其鍵值是全域變數名稱。 $_SERVER:Web伺服器的變數,屬於目前PHP程式執行環境的相關資料。 $_GET:儲存HTTP GET方法傳入PHP程式表單欄位值或URL參數的結合陣列,其鍵值是欄位或參數名稱。 $_POST:儲存HT
Thumbnail
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Thumbnail
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News