PHP/Konstruktory i destruktory
Z Wikibooks, biblioteki wolnych podręczników.
Spis treści |
[edytuj] Konstruktory i destruktory
Metody klas nie muszą być wywoływane wyłącznie przez programistę tworzącego dany skrypt. Istnieje pewna grupa metod, które są wywoływane automatycznie przez interpreter w momencie zajścia jakiegoś zdarzenia - metody takie nazywamy magicznymi, a w PHP możemy poznać je po tym, że ich nazwy rozpoczynają się od dwóch podkreśleń: __.
Pierwszymi magicznymi metodami, jakie poznamy, będą konstruktor i destruktor, wywoływane odpowiednio w momencie tworzenia oraz niszczenia obiektu.
[edytuj] Konstruktor
Konstruktor jest metodą o nazwie __construct(), która może pobierać parametry, lecz nie wolno jej zwracać wartości. Jej zadaniem jest zainicjowanie nowoutworzonego obiektu. Wracając do przykładu z klasami reprezentującymi osoby, można je przepisać następująco:
<?php
class osoba
{
public $imie;
public $nazwisko;
public function __construct($imie, $nazwisko)
{
$this -> ustawPersonalia($imie, $nazwisko);
} // end __construct();
public function ustawPersonalia($imie, $nazwisko)
{
$this -> imie = $imie;
$this -> nazwisko = $nazwisko;
} // end ustawPersonalia();
public function personalia()
{
return $this -> imie.' '.$this -> nazwisko;
} // end personalia();
}
$osoba = new osoba('Adam', 'Kowalski');
echo $osoba -> personalia();
?>
Teraz personalia osoby możemy ustawić zarówno stosowną metodą, jak i w momencie tworzenia obiektu, ponieważ stworzyliśmy konstruktor, który pobiera imię i nazwisko i kieruje je do metody ustawPersonalia(). Zauważmy, że w takim wypadku przekazujemy te parametry tuż przy nazwie klasy tak, jakby to była funkcja. Jeśli konstruktor nie pobiera żadnych parametrów, możemy (acz nie musimy) pominąć nawiasy:
// wywołanie konstruktora, który nie pobiera parametrów $obiekt = new klasa; $obiekt = new klasa();
Ćwiczenie: W poprzednim rozdziale podaliśmy zbudowany na OOP system konfiguracji. Jedną z klas wchodzących do zestawu była fileResource. Dodaj do niej konstruktor, który pobiera nazwę z plikiem konfiguracyjnym tak, aby można go było podać już w momencie tworzenia obiektu. Przerób kod korzystający z tego zestawu klas, aby korzystał z konstruktora.
[edytuj] Destruktor
Destruktor zaś nazywa się __destruct(). Nie może on ani pobierać parametrów, ani zwracać jakichkolwiek wartości. Wywoływany jest w momencie niszczenia obiektu (czyli sytuacji, gdy nie ma już żadnych odwołań do obiektu). Tłumacząc praktycznie:
<?php
class MojaKlasa
{
public $zmienna;
public function __construct($zmienna)
{
$this -> zmienna = $zmienna;
}
public function __destruct()
{
echo $this -> zmienna;
}
}
$klasa = new MojaKlasa('tekst');
$klasa -> zmienna = 'innytekst';
?>
Powyższy przykład wyświetli napis innytekst. Jak widać, destruktor jest wywoływany jako ostatni. Ta właściwość przydaje się np. przy zamykaniu połączeń z bazą danych.