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

PHP 建構子與解構子深度解析:物件生命週期完全掌握

     編輯:PHP 綜合知識

物件生命週期的兩大關鍵時刻

在 PHP 物件導向程式設計中,建構子(__construct)與解構子(__destruct)分別標誌著物件的誕生與終結。掌握它們的觸發時機與行為,是撰寫資源管理正確程式的基礎。

建構子:物件初始化的最佳時機

當使用 new 關鍵字實例化類別時,建構子會自動被呼叫。若子類別未定義建構子,會自動尋找並呼叫父類別的建構子。

解構子:資源釋放的最後防線

解構子會在以下三種情況自動觸發:

  1. unset() 銷毀物件:但若存在其他變數參考同一物件(傳值參考),則不會觸發。
  2. 變數重新指向:原物件失去最後一個參考時。
  3. 腳本執行結束:PHP 引擎關閉前會清理所有剩餘物件。

完整執行流程示範

class Demo {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
        echo "物件 {$this->name} 已建立<br><br>";
    }
    
    public function __destruct() {
        echo "物件 {$this->name} 已銷毀<br><br>";
    }
}

$a = new Demo('A');
$b = new Demo('B');
$c = new Demo('C');

unset($b);      // 明確銷毀 B
$c = 'new value'; // C 失去參考,觸發解構子
// 腳本結束時,A 才會被銷毀

執行結果分析

物件 A 已建立
物件 B 已建立
物件 C 已建立
物件 B 已銷毀
物件 C 已銷毀
物件 A 已銷毀

觀察輸出順序可發現:unset($b) 立即觸發 B 的解構子;$c = 'new value' 導致 C 失去參考而觸發解構子;A 直到腳本結束才被銷毀。

實務應用場景

  • 建構子:資料庫連線初始化、設定檔載入、依賴注入
  • 解構子:關閉資料庫連線、釋放檔案控制代碼、寫入快取資料

繼承時的注意事項

子類別若定義了自己的建構子/解構子,不會自動呼叫父類別的對應方法,必須手動呼叫 parent::__construct() 或 parent::__destruct() 以確保父類別邏輯正確執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved