Podręcznik PHP
Poprzedni | Rozdział 18. Klasy i obiekty (PHP 4) | Następny

# Konstruktory

Konstruktory są funkcjami klasy, które są automatycznie wywoływane przy tworzeniu nowej instancji klasy korzystając z operatora new. Funkcja staje się konstruktorem kiedy ma taką samą nazwę jak klasa. Jeśli klasa nie ma konstruktora, użyty zostanie konstruktor klasy nadrzędnej, jeśli taka istnieje.

`<?php class Auto_Koszyk extends Koszyk { function Auto_Koszyk() { $this->dodaj_artykul ("10", 1); } } ?>`

Ten kod definiuję klasę Auto_Koszyk, który jest klasą Koszyk pluc konstruktor, który inicjalizuje wózek z jednym artykułem "10" za każdym razem, kiedy Auto_Koszyk jest tworzony operatorem "new". Konstruktory mogą pobierać argumenty i te argumenty mogą być opcjonalne, przez co są jeszcze bardziej użyteczne. Aby w dalszym ciągu móc używać klasy bez parametrów, wszystkie parametry konstruktora powinny stać się opcjonalne przez dodanie domyślnych wartości.

`<?php class Kontruktor_Koszyk extends Koszyk { function Konstruktor_Koszyk($artykul = "10", $ilosc = 1) { $this->dodaj_artykul ($artykul, $ilosc); } } // Kup te same nudne rzeczy... $zwykly_koszyk = new Konstruktor_Koszyk; // Czas na prawdziwe zakupy... $inny_koszyk = new Konstruktor_Koszyk("20", 17); ?>`

Możesz także użyć operatora @ aby wyciszyć błędy zachodzące w konstruktorze, np. @new

`<?php class A { function A() { echo "Jestem konstruktorem klasy A.<br />\n"; } function B() { echo "Jestem zwykłą funkcją o nazwie B w klasie A.<br />\n"; echo "Nie jestem konstruktorem w klasie A.<br />\n"; } } class B extends A { } // Wywoła to B() jako konstruktor. $b = new B; ?>`

Funkcja B() z klasy A niespodziewanie stanie się konstruktorem w klasie B, pomimo że wcale nie miała nim być. PHP 4 nie obchodzi czy funkcja została zdefiniowana w klasie B czy została odziedziczona.

Uwaga!
PHP 4 nie wywołuje automatycznie konstruktora klasy bazowej z kontruktora klasy pochodnej. Twoim zadaniem jest propagacja wywołań konstruktorów klas nadrzędnych, jeśli to konieczne.

Destruktory są funkcjami, które są wywoływanie automatycznie kiedy obiekty są niszczone albo przez użycie unset() albo przez wyjście z zasięgu. W PHP nie ma destruktorów. Można jednak użyć funkcji register_shutdown_function() aby symulować działanie destruktorów.

Poprzedni | Spis treści | Następny
extends | Początek rozdziału | Operator rozróżnienia zasięgu (::)