Destruktor (__destruct)
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 8 z 91.
Metoda __destruct to specjalna metoda, która jest wywoływana automatycznie, gdy obiekt zostaje zniszczony. Obiekt zostaje zniszczony, gdy nie ma już do niego żadnych odwołań lub gdy skrypt się kończy.
Oto przykład klasy zawierającej zarówno konstruktor, jak i 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";
}
}Utwórz obiekt i obserwuj jego cykl życia:
echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r); // jawnie zniszcz obiekt
echo "=== End ===\n";Wynik:
=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===Funkcja unset() usuwa odwołanie do obiektu, natychmiast wywołując destruktor.
Jeśli nie wywołasz unset(), destruktor uruchomi się automatycznie po zakończeniu skryptu:
$r = new Resource("Logger");
echo "Working...\n";
// __destruct jest wywoływana automatycznie na końcu skryptuWynik:
Logger was created
Working...
Logger was destroyedNajważniejsze: metoda __destruct jest przydatna do zadań porządkowych, takich jak zamykanie plików, zwalnianie zasobów czy rejestrowanie informacji, gdy obiekt nie jest już potrzebny.
Wyzwanie
ŚredniUzupełnij klasę Resource w pliku resource.php:
- Dodaj metodę
__construct, która przyjmuje$name, ustawia go jako właściwość i wyświetla"[name] was created" - Dodaj metodę
logMessage, która przyjmuje$messagei wyświetla"Log: [message]" - Dodaj metodę
__destruct, która wyświetla"[name] was destroyed"
Plik driver.php przetestuje cykl życia obiektów klasy Resource.
Spróbuj swoich sił
<?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");
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online