__construct()PHP 5 引入統一構造函數名 __construct()。創建對象時自動調用,適合初始化工作。
若子類定義了 __construct(),不會隱式調用父類構造函數。需在子類中顯式調用 parent::__construct()。這與 Java/C++ 行為不同。
class BaseClass {
function __construct() { print "In BaseClass constructor\n"; }
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 必須顯式調用
print "In SubClass constructor\n";
}
}
$obj = new BaseClass(); // 輸出 BaseClass constructor
$obj = new SubClass(); // 輸出 BaseClass constructor + SubClass constructor
若類中無 __construct(),PHP 5 會嘗試查找同名舊式構造函數(類名函數)。唯一衝突場景:類中已有 __construct() 但非構造函數用途。
__destruct()PHP 5 引入析構函數,類似 C++。當對象所有引用被刪除或顯式銷毀(unset())時執行。
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
// 腳本結束或 unset($obj) 時輸出:Destroying MyDestructableClass
子類析構函數中必須顯式調用 parent::__destruct()。
throw 異常會導致致命錯誤(Fatal Error)。__construct() 而非同名函數,確保兼容性與可讀性。parent::__construct() / parent::__destruct(),保證父類初始化/清理邏輯執行。