Forum und email
Konstruktory

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.