__construct()物件實例化時(new ClassName())自動呼叫,用於初始化屬性、建立資源連線、載入配置等。
// PHP 4 風格(仍相容但不推薦)
class Person {
function Person($name) { // 類名同名方法
$this->name = $name;
}
}
// PHP 5+ 標準魔術方法(推薦)
class Person {
public $name;
public $age;
public $sex;
function __construct($name = '', $age = 0, $sex = '') {
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
echo "物件已建立:{$this->name}";
}
}
new 時自動觸發parent::__construct()__destruct()物件被銷毀前(記憶體釋放、腳本結束、unset())自動呼叫,用於釋放資源、關閉連線、寫入日誌等收尾工作。
class Database {
private $link;
function __construct($config) {
$this->link = mysqli_connect($config['host'], $config['user'], $config['pass'], $config['db']);
if (!$this->link) die('連線失敗: ' . mysqli_connect_error());
}
function __destruct() {
if ($this->link) {
mysqli_close($this->link);
echo "資料庫連線已關閉";
}
}
function query($sql) {
return mysqli_query($this->link, $sql);
}
}
// 使用範例
$db = new Database(['host'=>'localhost','user'=>'root','pass'=>'','db'=>'test']);
$result = $db->query('SELECT * FROM users');
// 腳本結束或 unset($db) 時自動呼叫 __destruct() 關閉連線
$this 關鍵字深度解析$this->property$this->method()| 方法 | 觸發時機 | 常見用途 |
|---|---|---|
__construct() | 物件建立時 | 初始化 |
__destruct() | 物件銷毀前 | 資源釋放 |
__call() | 呼叫不可存取方法 | 動態代理 |
__callStatic() | 靜態呼叫不可存取方法 | 靜態代理 |
__get() | 讀取不可存取屬性 | 唯讀/計算屬性 |
__set() | 寫入不可存取屬性 | 驗證/日誌 |
__isset() | isset() 檢測不可存取屬性 | 自定義存在判斷 |
__unset() | unset() 不可存取屬性 | 清理邏輯 |
__sleep() | serialize() 前 | 指定序列化屬性 |
__wakeup() | unserialize() 後 | 重建資源連線 |
__toString() | 物件當字串使用 | 友善輸出 |
__invoke() | 物件當函數呼叫 | 可呼叫物件 |
__clone() | clone 物件後 | 深拷貝處理 |
__debugInfo() | var_dump() 時 | 控制除錯輸出 |
unset() 或實作 __destruct 斷開引用