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 aufgerufenAusgabe:
Logger was created
Working...
Logger was destroyedWichtiger 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.
Aufgabe
MittelVervollständige die Klasse Resource in resource.php:
- Füge eine
__construct-Methode hinzu, die$nameentgegennimmt, ihn als Eigenschaft setzt und"[name] was created"ausgibt - Füge eine
logMessage-Methode hinzu, die$messageentgegennimmt und"Log: [message]"ausgibt - Füge eine
__destruct-Methode hinzu, die"[name] was destroyed"ausgibt
Die Datei driver.php testet den Lebenszyklus deiner Resource-Objekte.
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");
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler