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

PHP 5 建構函數與解構函數深度解析

     編輯:PHP 綜合知識

PHP 5 物件導向核心:建構函數、解構函數與繼承機制

建構函數 __construct

在類別中宣告名為 __construct 的函數,即為建構函數。建立物件實例時自動執行。__ 為兩個底線。如同其他函數,建構函數可有參數與預設值。可在一個陳述式中建立物件並設定屬性。

解構函數 __destruct

定義名為 __destruct 的函數,PHP 會在物件銷毀前呼叫。稱為解構函數。

繼承與建構函數

繼承是類別強大功能。子類別(衍生類別)繼承父類別(基底類別)所有屬性與方法,並可新增或覆寫。使用 extends 關鍵字繼承。
建構函數隨其他方法一起被繼承,但建立物件時不會自動執行父類別建構函數。若需此功能,必須用 :: 運算子明確呼叫:parent::__construct()。

舊式建構函數相容性

早期 PHP 以類別名稱命名建構函數。PHP 5 仍支援此寫法:若類別同時擁有 __construct 與同名函數,PHP 視 __construct 為建構函數。這使舊版類別仍可使用。但新腳本應使用 __construct。新寫法賦予建構函數唯一名稱,不受類別名稱影響,修改類別名稱時無需修改建構函數名稱。

建構函數存取權限與設計模式

可為建構函數指定存取權限(public/protected/private),影響實例化能力,可實現如 Singleton 等設計模式。

解構函數機制

解構函數與建構函數相反。PHP 預設釋放物件屬性記憶體並銷毀相關資源。解構函數允許在使用物件後執行任意程式碼清理記憶體。
當 PHP 判定腳本不再參考物件時呼叫解構函數:
- 函數內部:發生在 return 時
- 全域變數:腳本結束時
若想明確銷毀物件,可將變數指派為 NULL 或呼叫 unset()。

實例計數器範例

<?php
class Counter {
    private static $count = 0;
    function __construct() { self::$count++; }
    function __destruct() { self::$count--; }
    function getCount() { return self::$count; }
}

$c = new Counter();      // 輸出 1
print($c->getCount() . "<br>");
$c2 = new Counter();     // 輸出 2
print($c->getCount() . "<br>");
$c2 = NULL;              // 輸出 1
print($c->getCount() . "<br>");
?>

記憶體與實例

新建實例時,記憶體會準備儲存所有屬性。每個實例擁有獨立屬性組,但方法由該類別所有實例共享。

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