Menu
Coddy logo textTech

Destruktor (__destruct)

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 8 von 91.

Die __destruct-Methode ist eine spezielle Methode, die automatisch aufgerufen wird, wenn ein Objekt zerstört wird. Ein Objekt wird zerstört, wenn es keine Referenzen mehr darauf gibt oder wenn das Skript endet.

Hier ist ein Beispiel für eine Klasse mit sowohl einem Konstruktor als auch einem Destruktor:

<?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";
    }
}

Erstellen Sie ein Objekt und beobachten Sie den Lebenszyklus:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // das Objekt explizit zerstören
echo "=== End ===\n";

Ausgabe:

=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===

Die Funktion unset() entfernt die Referenz auf das Objekt und löst den Destruktor sofort aus.

Wenn Sie unset() nicht aufrufen, wird der Destruktor automatisch ausgeführt, wenn das Skript beendet ist:

$r = new Resource("Logger");
echo "Working...\n";
// __destruct wird am Ende des Skripts automatisch aufgerufen

Ausgabe:

Logger was created
Working...
Logger was destroyed

Wichtiger Punkt: Die __destruct-Methode ist nützlich für Aufräumarbeiten wie das Schließen von Dateien, das Freigeben von Ressourcen oder das Protokollieren, wenn ein Objekt nicht mehr benötigt wird.

challenge icon

Aufgabe

Mittel

Vervollständigen Sie die Klasse Resource in resource.php:

  1. Fügen Sie eine __construct-Methode hinzu, die $name entgegennimmt, diesen als Eigenschaft setzt und "[name] was created" ausgibt.
  2. Fügen Sie eine logMessage-Methode hinzu, die $message entgegennimmt und "Log: [message]" ausgibt.
  3. Fügen Sie eine __destruct-Methode hinzu, die "[name] was destroyed" ausgibt.

Die Datei driver.php wird den Lebenszyklus Ihrer Resource-Objekte testen.

Spickzettel

Die Methode __destruct wird automatisch aufgerufen, wenn ein Objekt zerstört wird (wenn es keine Referenzen mehr darauf gibt oder wenn das Skript endet).

Beispiel für eine Klasse mit Konstruktor und Destruktor:

<?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";
    }
}

Die Funktion unset() entfernt die Referenz auf ein Objekt und löst den Destruktor sofort aus:

$r = new Resource("Connection");
unset($r);  // das Objekt explizit zerstören

Wenn unset() nicht aufgerufen wird, wird der Destruktor automatisch ausgeführt, wenn das Skript beendet ist.

Die Methode __destruct ist nützlich für Aufräumarbeiten wie das Schließen von Dateien, das Freigeben von Ressourcen oder das Protokollieren.

Probier es selbst

<?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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung