language oop constructor


KonstruktoryPodręcznik PHPPoprzedniRozdział 9. Klasy i ObiektyNastępnyKonstruktoryUwaga! Konstruktory zachowują się inaczej w PHP 3 i w PHP 4. Semantyka PHP 4 jest mocno zalecana. Konstruktory są funkcjami klasy, które są automatycznie wywoływane przy tworzeniu nowej instancji klasy korzystając z operatora new. W PHP 3 funkcja staje się konstruktorem kiedy ma taką samą nazwę jak klasa. W PHP 4 funkcja staje się konstruktorem, kiedy ma taką samą nazwę jak klasa, w której ta funkcja została zdefiniowana - różnica jest subtelna, ale bardzo ważna (zobacz poniżej) // Działa w PHP 3 i PHP 4. 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. // Działa w PHP 3 i PHP 4. 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);Uwaga! W PHP 3, dziedziczone klasy i konstruktory mają wiele ograniczeń. Poniższe przykłady powinny być dokładnie przeczytane w celu zrozumienia tych ograniczeń. class A { function A() { echo "Jestem konstruktorem klasy A.<br>\n"; } } class B extends A { function C() { echo "Zwykła funkcja.<br>\n"; } } // W PHP 3 nie zostanie wywołany żaden konstruktor. $b = new B; W PHP 3 w powyższym przykładzie nie będzie wywołany żaden konstruktor. Zasadą PHP 3 jest: 'Konstruktor to funkcja o takiej samej nazwie jak klasa'. Nazwą klasy jest B, a w klasie B nie ma funkcji o nazwie B(). Nic się nie dzieje. Zostało to poprawione w PHP 4 przez wprowadzenie innej zasady: jeśli klasa nie ma konstruktora, używany jest konstruktor klasy bazowej, jeśli taki istnieje. W PHP 4 powyższy przykład wyświetli 'Jestem konstruktorem klasy A.<br>'. 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 { function C() { echo "Jestem zwykłą funkcją.<br>\n"; } } // Wywoła to B() jako konstruktor. $b = new B; W PHP 3, funkcja B() z klasy A niespodziewanie stanie się konstruktorem w klasie B, pomimo że wcale nie miała nim być. Zasadą PHP 3 jest: 'Konstruktor to funkcja o takiej samej nazwie co klasa'. PHP 3 nie obchodzi czy funkcja została zdefiniowana w klasie B czy została odziedziczona. Zostało to poprawione w PHP 4 przez modyfikację tej zasady do: 'Konstruktor to funkcja o tej samej nazwie co klasa w której została zdefiniowana'. W związku z tym w PHP 4 clasa B nie miałaby własnego konstruktora. Wywołany byłby tylko konstruktor klasy bazowej, wyświetlając 'Jestem konstruktorem klasy A.<br>'. Uwaga! Ani PHP 3 ani PHP 4 nie wywoła automatycznie konstruktora klasy bazowej z kontruktora klasy pochodnej. Twoim zadaniem jest propagacja wywołań konstruktorów klas nadrzędnych, jeśli to konieczne. Notatka: Ani w PHP 3 ani w PHP 4 nie ma destruktorów. Zamiast tego możesz użyć register_shutdown_function() aby symulować działanie destruktorów. 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. PoprzedniSpis treściNastępnyextendsPoczątek rozdziału::

Wyszukiwarka

Podobne podstrony:
language oop constructor
language oop constructor
language oop
language oop
language oop magic functions
language oop serialization
language oop serialization
language oop newref
language oop newref
language oop newref
language oop magic functions
language oop
language oop serialization

więcej podobnych podstron