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

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會員
41內容數
test
留言
avatar-img
留言分享你的想法!
林柏宇的沙龍 的其他內容
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。
在軟體工程中,文件管理常被忽視,但對於多方協作至關重要。本文深入探討API文件、YAML格式和UML圖的應用,強調保持文件的版本控制,使用Swagger和Markdown工具提升可讀性與協作效率。此外,我們將討論如何利用PlantUML輕鬆繪製UML圖,以促進開發團隊之間的有效溝通與理解。
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。
本文將介紹一些在 PHP 開發過程中實用的工具和技巧,涵蓋 PHP 分析器 xhprof、PHP 沙盒、PHP_CodeSniffer、PHPDoc 註解及靜態分析工具 PHPStan 等。這些工具能夠幫助開發者提高效率、減少錯誤,並改善程式碼的可讀性。
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。
在軟體工程中,文件管理常被忽視,但對於多方協作至關重要。本文深入探討API文件、YAML格式和UML圖的應用,強調保持文件的版本控制,使用Swagger和Markdown工具提升可讀性與協作效率。此外,我們將討論如何利用PlantUML輕鬆繪製UML圖,以促進開發團隊之間的有效溝通與理解。
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。