ویرانگر (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 از بین برود یا اسکریپت تمام شود:
// "فایل بسته شد." نمایش داده می‌شود
?>

چه زمانی شیء نابود می‌شود؟

مثال — زمان‌بندی 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

ویژگیConstructorDestructor
متد__construct()__destruct()
زمان اجراهنگام ساخت شیءهنگام نابودی شیء
پارامترمی‌تواند داشته باشدندارد
تعدادیک‌بار هنگام ساختیک‌بار هنگام نابودی
هدفمقداردهی اولیهپاک‌سازی

unset و null

<?php
$obj = new MyClass();

// روش ۱: unset
unset($obj);  // Destructor اجرا می‌شود

// روش ۲: null
$obj = null;  // Destructor اجرا می‌شود
?>

این مبحث بخشی از دوره آموزش کامل PHP است.

ابزارهای مرتبط