Konstruktory
Uwaga
!
|
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
)
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
.
Możesz
także
użyć
operatora
@
aby
wyciszyć
błędy
zachodzące
w
konstruktorze
,
np
.
@new
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ń
.
|
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
'
.
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
.