הורס (__destruct)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 8 מתוך 91.
המתודה __destruct היא מתודה מיוחדת שנקראת אוטומטית כאשר אובייקט מושמד. אובייקט מושמד כשאין אליו עוד הפניות או כשהסקריפט מסתיים.
הנה דוגמה למחלקה עם בנאי וגם משמיד:
<?php
class Resource {
public $name;
public function __construct($name) {
$this->name = $name;
echo $this->name . " was created\n";
}
public function __destruct() {
echo $this->name . " was destroyed\n";
}
}צרו אובייקט וצפו במחזור החיים שלו:
echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r); // השמד את האובייקט במפורש
echo "=== End ===\n";פלט:
=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===הפונקציה unset() מסירה את ההפניה לאובייקט, ובכך מפעילה מיד את ההורס.
אם לא תקראו ל־unset(), ההורס יפעל אוטומטית כשהסקריפט יסתיים:
$r = new Resource("Logger");
echo "Working...\n";
// הקריאה ל-__destruct מתבצעת אוטומטית בסוף הסקריפטפלט:
Logger was created
Working...
Logger was destroyedנקודה חשובה: המתודה __destruct שימושית למשימות ניקוי כמו סגירת קבצים, שחרור משאבים או רישום ביומן כשאין עוד צורך באובייקט.
אתגר
בינוניהשלימו את המחלקה Resource בקובץ resource.php:
- הוסיפו מתודת
__constructשמקבלת את$name, מגדירה אותו כמאפיין ומדפיסה"[name] was created" - הוסיפו מתודת
logMessageשמקבלת את$messageומדפיסה"Log: [message]" - הוסיפו מתודת
__destructשמדפיסה"[name] was destroyed"
הקובץ driver.php יבדוק את מחזור החיים של אובייקטי Resource.
נסו בעצמכם
<?php
require_once 'resource.php';
$testCase = trim(fgets(STDIN));
if ($testCase == "basic_test") {
echo "=== Start ===\n";
$r = new Resource("FileHandler");
echo "Using " . $r->name . "\n";
unset($r);
echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
$r = new Resource("Logger");
$r->logMessage("Application started");
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין