首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 魔術方法完整總結:__construct 到 __invoke 的 11 大核心方法詳解

     編輯:PHP 相關知識

魔術方法概覽

PHP 中以雙底線 __ 開頭的方法稱為魔術方法,會在特定情境下自動被呼叫。本文系統整理 11 個核心魔術方法的用途、觸發時機與注意事項。

1. __get / __set — 不可見屬性存取攔截

  • __get($property):讀取未聲明或不可見(protected/private)屬性時觸發。
  • __set($property, $value):寫入未聲明或不可見屬性時觸發。

2. __isset / __unset — 不可見屬性檢查與銷毀

  • __isset($property):對不可見屬性呼叫 isset() 時觸發。
  • __unset($property):對不可見屬性呼叫 unset() 時觸發。

3. __call — 不可見方法攔截

__call($method, $args):呼叫未定義或不可見方法時觸發,包含方法名與參數陣列。

4. __autoload — 類自動載入(已棄用)

嘗試使用未定義類時自動調用。PHP 7.2+ 棄用,請改用 spl_autoload_register()。 拋出的異常無法被 catch 捕獲。

5. __construct / __destruct — 建構與解構

  • __construct():實例化物件時自動呼叫,優於同名方法。
  • __destruct():物件銷毀前(記憶體釋放前)呼叫,可用於釋放資源、關閉連線。

6. __clone — 物件複製攔截

PHP 5 採用參考賦值,需用 clone 關鍵字複製物件,執行時自動呼叫 __clone(),可在其中執行初始化操作(如深複製資源)。

7. __toString — 物件轉字串

  • 直接 echo $obj 或字串語境下自動呼叫。
  • 必須回傳字串,否則拋出 E_RECOVERABLE_ERROR(PHP 5.2+)。
  • PHP 5.2 前僅在 echo/print 觸發,之後所有字串語境均生效。

8. __sleep / __wakeup — 序列化與反序列化鉤子

  • __sleep():serialize() 前呼叫,回傳需序列化的屬性名陣列,可關閉資源、提交資料。
  • __wakeup():unserialize() 時呼叫,重建資料庫連線等資源。

9. __set_state — var_export() 靜態工廠

PHP 5.1+,var_export() 導出類時調用,接收屬性陣列,回傳物件實例。

10. __invoke — 物件當函數調用

PHP 5.3+,嘗試以函數方式呼叫物件($obj())時觸發。

11. __callStatic — 靜態方法攔截

PHP 5.3+,處理不可見靜態方法呼叫,必須聲明為 public static。

版本兼容提醒

方法最低版本
__autoloadPHP 5(已棄用)
__invoke, __callStaticPHP 5.3
其他PHP 5
所有魔術方法必須聲明為 public,否則不會被觸發。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved