تقوم الفئة بتشغيل الهادم Destructor قبل الانتهاء مباشرة لإيقاف تنفيذ شيئ ما عند الوصول إلى نهاية الفئة ( PHP Class ) أو عند نهاية البرنامج ( حسب الاستخدام ). وهي عبارة عن طريقة ( PHP Method ) وعادة ماتقوم بمهام التنظيف. وعلى عكس المُنشِئات ( PHP Constructors ) لا يمكن تمرير الوسائط للهادامات. والهادمات تُعد من الطرق السحرية سابقة التعريف ( PHP Magic Methods ).
استخدام الهادمات إغلاق الاتصال بقاعدة البيانات أو إغلاق الملفات المفتوحة أو عند حذف الكائن وغيرها متي يبدأ عمل الهادمات؟تعمل الهادمات تلقائياً :
في نهاية الـ Script بحيث تقوم بحذف الكائن مادام لا حاجة له. فقد انتهى البرنامج. أثناء عمل الـ Script إذا تم حذف الكائن يدوياً عن طريق الدالة unset ظهور خطأ في عند إنشاء الكائنصيغة الهادم Destructor Syntax
عند تعريف منشئ تستخدم الكلمة destruct مسبوقة بشرطتين تحتيتين ( __ ) ( Two Underscores ).
<?php class ClassName{ // تعريف الخصائص public $name; // تعريف الهادم public function __destruct(){} } ?> أمثلة على استخدامات الهادماتفي المثال التالي سنقوم بعمل فئة ثم نقوم بتعريف كلاً من المُنشيئ والهادم ونقوم بإنشاء كائن جديد . وسنجد أنه تم تنفيذ كلاً من المُنشِئ والهادم تلقائياً ولكن لاحظ كيف كانت نتيجة الهادم
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Destructor</title> </head> <body> <div> <?php class Animal { public $name; public function __construct($name){ echo "<p>I'm alive!</p>"; $this->name = $name; } public function __destruct(){ echo "<p>I'm dead now</p>"; } } $animal = new Animal("Bob"); //unset($animal); ?> </div> </body> </html>عند تجربة الكود سنجد أنه بمجرد إنشاء الكائن تم تشغيل كلاً من المٌنشِئ والهادم تلقائياً، ولكن عند عرض كود المصدر ستجد أن الجملة ” I’m dead now ” الناتجة عن الهادم تظهر بعد إنتهاء البرنامج أي بعد وسم <html/> .
الآن قم بإزالة علامة التعليق ( // ) في السطر رقم 22 ، بحيث نقوم بحذف الكائن بصورة متعمدة أثناء تشغيل البرنامج. فستجد أن الجملة ” I’m dead now ” ظهرت بصورة طبيعية بعد نتيجة المُنشئ ” !I’m alive “.
[button title=”عرض نتيجة / تحميل الكود” link=”https://makiomar.com/php-oop/php_destructors/php_destructor.php” target=”_blank” size=”” color=”” class=””]
هذا المثال بالطبع ليس الاستخدام العملي الحقيقي للهادمات ، وإنما هو لتوضيح طريقة عملها. لكن من الاستخدامات الفعلية الحقيقة للهادمات :
يمكنك عمل مُنشئ يقوم بعمل اتصال بقاعدة البيانات ، ثم عمل هادم يقوم بغلق هذا الاتصال بعد انتهاء البرنامج. يمكن عمل هادم يقوم ببناء سجل log في نهاية برنامج ما قبل عملية التنظيف. غلق ملف تم فتحه أثناء عمل البرنامج.وللهادمات استخدامات أخرى كثيرة جداً ومتعددة . مادمت قد فهمت طريقة عملها يمكنك توظيفها في أي شيء تريد تنفيذه عند انتهاء برنامج ما.






