Menu
Coddy logo textTech

הורס (__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 שימושית למשימות ניקוי כמו סגירת קבצים, שחרור משאבים או רישום ביומן כשאין עוד צורך באובייקט.

challenge icon

אתגר

בינוני

השלימו את המחלקה Resource בקובץ resource.php:

  1. הוסיפו מתודת __construct שמקבלת את $name, מגדירה אותו כמאפיין ומדפיסה "[name] was created"
  2. הוסיפו מתודת logMessage שמקבלת את $message ומדפיסה "Log: [message]"
  3. הוסיפו מתודת __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");
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין