دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / مخرب (PHP Destructor)

مخرب (PHP Destructor)

30 دقیقه Article

تخریب‌کننده (__destruct): لحظه‌یِ وداع ⚰️🧹

تخریب‌کننده یا Destructor زمانی اجرا می‌شود که شیء دیگر موردِ نیاز نیست یا اسکریپت به پایان رسیده است. این تابع برایِ کارهایِ "نظافتی" عالی است.

کاربردهایِ رایج:

  • بستنِ اتصالاتِ دیتابیس که باز مانده‌اند.
  • حذفِ فایل‌هایِ موقتی.
  • نوشتنِ لاگِ نهایی برایِ یک عملیات.

رفتارِ خودکار:

برخلافِ زبان‌هایی مثل C++، در PHP مدیریتِ حافظه توسط Garbage Collector انجام می‌شود. وقتی هیچ متغیری دیگر به یک شیء اشاره نمی‌کند، تخریب‌کننده فراخوانی می‌شود.

{code_block('function __destruct() {\n echo "The object is being destroyed!";\n}')}
ترتیبِ اجرا: تخریب‌کننده‌ها معمولاً در انتهایِ فایل اجرا می‌شوند. هرگز در تخریب‌کننده کدی ننویسید که به خروجیِ فوری و مرتبِ صفحه وابسته است.
توابع جادویی: تخریب‌کننده یکی از چندین "Magic Method" در PHP است. این توابع به شما قدرت می‌دهند به رویدادهایِ درونیِ زبان واکنش نشان دهید.

مثالِ واقعی:

تصور کنید کلاسی برایِ آپلودِ فایل دارید. در سازنده فایل را باز می‌کنید و در تخریب‌کننده مطمئن می‌شوید که فایل بسته شده است، حتی اگر خطایی رخ داده باشد.

<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: معماریِ پیشرفته و مهندسیِ اشیاء 🐘💎

برنامه‌نویسیِ شیءگرا در PHP پس از نسخه‌یِ ۷ و ۸ تغییراتِ بنیادینی داشته و به ابزاری بسیار قدرتمند برایِ ساختِ سیستم‌هایِ پیچیده تبدیل شده است.

۱. ساختارِ حافظه و Object Handles

در PHP، متغیرهایی که حاویِ یک شیء هستند، خودِ شیء را ذخیره نمی‌کنند؛ بلکه یک Identifier یا دستگیره (Handle) را نگه می‌دارند که به جدولِ اشیاءِ درونیِ موتورِ Zend Engine اشاره می‌کند. به همین دلیل است که وقتی یک شیء را به تابعی پاس می‌دهید، تغییرات در همان شیءِ اصلی اعمال می‌شود (شبه‌ارجاع).

۲. رعایتِ اصولِ SOLID

در طراحیِ کلاس‌ها، همیشه به اصلِ Single Responsibility پایبند باشید. یک کلاس باید فقط یک دلیل برایِ تغییر داشته باشد. استفاده از Interfaces به شما اجازه می‌دهد وابستگی‌هایِ کدتان را به حداقل برسانید (Dependency Inversion).

۳. کدهایِ JIT-Friendly

موتورِ JIT در PHP 8 کدها را به زبانِ ماشین تبدیل می‌کند. نوشتنِ کدهایِ شیءگرا با ساختارِ مشخص و استفاده از Property Typing به JIT کمک می‌کند تا کدهایِ شما را بسیار بهینه‌تر اجرا کند.

نکته مهندسی: همیشه از Strict Types استفاده کنید. این کار باعث می‌شود خطاهایِ منطقی در زمانِ توسعه پیدا شوند و از رفتارهایِ پیش‌بینی‌نشده در هنگامِ کار با متدها جلوگیری شود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

متد تخریب‌کننده Easy
سوال تمرین

متد __destruct را برایِ یک کلاس بنویسید که عبارت "Done" را چاپ کند.

پاسخ تمرین
PHP
<?php
class Logger {
  function __destruct() {
    echo "Done";
  }
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.