ویرانگر (Destructor)
متد __destruct در PHP — پاکسازی منابع هنگام نابودی شیء، تفاوت با Constructor
Destructor چیست؟
ویرانگر (Destructor) متدی است که هنگام نابودی شیء خودکار اجرا میشود. برعکس Constructor که هنگام ساخت اجرا میشود، Destructor هنگام حذف اجرا میگردد.
ساختار __destruct
<?php
class Logger {
private $file;
public function __construct($filename) {
$this->file = fopen($filename, "a");
echo "فایل باز شد.<br>";
}
public function log($message) {
fwrite($this->file, $message . "\n");
}
public function __destruct() {
fclose($this->file);
echo "فایل بسته شد.<br>";
}
}
$logger = new Logger("app.log");
$logger->log("پیام تست");
// وقتی $logger از بین برود یا اسکریپت تمام شود:
// "فایل بسته شد." نمایش داده میشود
?>
چه زمانی شیء نابود میشود؟
- پایان اسکریپت
- وقتی متغیر شیء
unset()شود - وقتی متغیر شیء به
nullتنظیم شود - وقتی متغیر از دامنه خارج شود (مثلاً پایان تابع)
مثال — زمانبندی Constructor و Destructor
<?php
class MyClass {
public function __construct() {
echo "۱. شیء ساخته شد<br>";
}
public function doSomething() {
echo "۲. کار انجام شد<br>";
}
public function __destruct() {
echo "۳. شیء نابود شد<br>";
}
}
function test() {
$obj = new MyClass(); // ۱. ساخته شد
$obj->doSomething(); // ۲. کار انجام شد
} // ۳. شیء نابود شد (خروج از تابع)
test();
// خروجی:
// ۱. شیء ساخته شد
// ۲. کار انجام شد
// ۳. شیء نابود شد
?>
کاربردهای Destructor
| کاربرد | مثال |
|---|---|
| بستن فایل | fclose() |
| بستن اتصال دیتابیس | $pdo = null |
| بستن اتصال شبکه | curl_close() |
| آزاد کردن حافظه | imagedestroy() |
| ثبت لاگ | ثبت زمان پایان عملیات |
Constructor vs Destructor
| ویژگی | Constructor | Destructor |
|---|---|---|
| متد | __construct() | __destruct() |
| زمان اجرا | هنگام ساخت شیء | هنگام نابودی شیء |
| پارامتر | میتواند داشته باشد | ندارد |
| تعداد | یکبار هنگام ساخت | یکبار هنگام نابودی |
| هدف | مقداردهی اولیه | پاکسازی |
unset و null
<?php
$obj = new MyClass();
// روش ۱: unset
unset($obj); // Destructor اجرا میشود
// روش ۲: null
$obj = null; // Destructor اجرا میشود
?>
این مبحث بخشی از دوره آموزش کامل PHP است.