Opozorilo |
Obnašanje konstruktorjev v PHP 3 in PHP 4 je različno. Obnašanje v PHP 4 je seveda boljše. |
Konstruktorji so funkcije v razredu, ki so klicat+ne avtomatsko, ko ustvarite novo instanco razreda z new. V PHP 3 funkcija postane konstruktor, ko ima isto ime kot razred. V PHP 4 funkcija postane konstruktor, ko ima isto ime kot razred v katerem je definirana - razlika je majhna a pomembna.
// Dela v PHP 3 in PHP 4. |
Zgornja koda definira razred Auto_Cart, torej Cart in konstruktor, ki inicializira Cart z novim predmetom, ki ima številko artikla "10", vsakič ko ga ustvarimo z "new". Konstruktorji imajo lahko tudi argumente, kar jim seveda poveča uporabnost. Da bi lahko uporabili razred brez parametrov, definiramo argumente kot neobvezne z definiranjem privzetih vrednosti.
// Dela v PHP 3 in PHP 4. |
Uporabite lahko tudi @ operator, da preprečite izpisovanje morebitnih napak v konstruktorju, recimo @new.
Opozorilo |
V PHP 3 imajo izpeljani razredi in konstruktorji veliko omejitev. Za boljše razumevanje si pazljivo preberite naslednje primere. |
class A |
V PHP 3 se konstruktor ne bo klical v zgornjem primeru. Pravilo v PHP 3 je: 'Konstruktor je funkcija, ki ima isto ime kot razred.'. Razred ima ime B in v tem razredu ni nobene funkcije z imenom B(). Nič se ne zgodi.
To je popravljeno v PHP 4 z novim pravilom: Če razred nima konstruktorja, kličemo konstrukor osnovnega razreda, če ta obstaja. Zgornji primer bi izpisal: 'Jaz sem konstruktor razreda A.<br>' v PHP 4.
class A |
V PHP 3 bo funkcija B() v razredu A postala konstruktor v razredu B, čeprav tega nismo želeli. Pravilo v PHP 3 pravi: 'Konstruktor je funkcija, katere ime je enako imenu razreda.'. PHP 3 ne zanima ali je funkcija definirana v razredu B ali pa je bila podedovana.
To je popravljeno v PHP 4 z spremembno tega pravila v: 'Konstruktor je funkcija, ki ima isto ime kot razred v katerem je definirana.'. Torej v PHP 4, razred B nebi imel konstruktorja in bi klicali konstruktor osnovnega razreda, kar bi izpisalo: 'Jat sem konstruktor razreda A.<br>'.
Opozorilo |
Tako PHP 3 kot PHP 4 ne bosta klicala konstruktorja osnovnega razreda avtomatično iz konstruktorja izpeljanega razreda. Vaša naloga je, da kličete konstruktorje osnovnih razredov kjer to želite. |
Opomba: Destruktorji ne obstajajo v PHP 3 ali PHP 4. Uporabite lahko funkcijo register_shutdown_function(), s katero simulirate efekt destruktorjev.
Destruktorji so funkcije, ki so klicane avtomatsko, ko uničimo razred z funkcijo unset() ali ko gremo ven iz območja. Konstruktorji ne obstajajo v PHP.