PHP kézikönyv
Előző
14.
Fejezet.
Osztályok, objektumok
Következő
Figyelem
A PHP 3 és PHP 4 konstruktorok különbözőképpen működnek.
A PHP 4 megvalósítása erősen javasolt.
A konstruktorok az osztályok olyan metódusai, amelyek automatikusan meghívásra kerülnek egy új objektumpéldány new kulcsszóval történő létrehozása során.
A PHP 3-ban egy metódus akkor tekinthető konstruktornak, ha a neve megyezik az osztály nevével.
A PHP 4-ben egy metódus akkor lesz kostruktorrá, hogy a neve megegyezik annak az osztálynak a nevével, ahol deifiniálták.
A különbség hajszálnyi, de kritikus (lásd lentebb).
/ / A PHP 3 és PHP 4 verziókban is működik class Auto_Kosar extends Kosar {function Auto_Kosar () {$this - berak ("10", 1);}}
Ez egy olyan Auto_Kosar nevű osztályt [objektumtípust] hoz létre, mint a Kosar, csak rendelkezik egy konstruktorral, amely inicializálja a kosarat 1 darab "10"-es áruval, valahányszor a new operátorral hozzuk létre az objektumot. [de csak akkor!!!] A konstruktoroknak is lehet átadni paramétereket, és ezek lehetnek elhagyhatók is, amely még hasznosabbá teszi őket.
Ha paraméterek nélkül is használható osztályt szeretnél, állíts be minden paraméternek alapértéket.
/ / A PHP 3 és PHP 4 verziókban is működik class Konstruktoros_Kosar extends Kosar {function Konstruktoros_Kosar ($sorsz = "10", $db = 1) {$this - berak ($sorsz, $db);}} / / Mindig ugyanazt az uncsi dolgot veszi... $kiindulo_kosar = new Konstruktoros_Kosar; / / Igazi vásárlás $masik_kosar = new Konstruktoros_kosar ("20", 17);
Az @ operátor használatával elnémíthatók a konstruktorban fellépő hibák, használata ilyen esetben: @new.
Figyelem
A PHP 3-ban a leszármazott osztályokra és konstrukrotokra számos korlátozás van.
Az alábbi példákat érdemes alaposan áttekinteni, hogy megértsd ezeket a korlátozásokat.
class A {function A() {echo "Én vagyok az A osztály konstruktora. br \n";}} class B extends A {function C() {echo "Én egy metódus vagyok. br \n";}} / / PHP 3-ban semmilyen konstruktor sem kerül meghívásra $b = new B;
PHP 3-ban semmilyen konstruktor sem kerül meghívásra a fenti példában.
A PHP 3 szabálya a következő: 'A konstruktor egy metódus, aminek ugyanaz a neve, mint az osztálynak'.
Az osztály neve B, és nincs B() nevű metódus a B osztályban.
Semmi sem történik.
Ez a PHP 4-ben ki van javítva egy másik szabály bevezetésével:
Ha az osztályban nincs konstruktor, a szülő osztály konstruktora hívódik meg, ha létezik.
A fenti példa kimenete 'Én vagyok az A osztály konstruktora. br' lett volna PHP 4-ben.
class A {function A() {echo "Én vagyok az A osztály konstruktora. br \n";} function B() {echo "Én egy B nevű metódus vagyok az A osztályban. br \n"; echo "Nem vagyok A konstruktora. br \n";}} class B extends A {function C() {echo "Én egy metódus vagyok. br \n";}} / / Ez meghívja B()-t, mint konstruktort $b = new B;
A PHP 3-ban az A osztály B() metódusa hirtelen konstruktorrá válik a B osztályban, habár ez soha sem volt cél.
A PHP 3 szabálya: 'A konstruktor egy metódus, aminek ugyanaz a neve, mint az osztálynak'.
A PHP 3 nem foglalkozik azzal, hogy a metódus a B osztályban van-e definiálva, vagy öröklés útján áll rendelkezésre.
Ez a PHP 4-ben ki van javítva egy másik szabály bevezetésével: 'A konstruktor egy metódus, aminek ugyanaz a neve, mint az osztálynak, ahol deifiniálták'.
Ezért a PHP 4-ben a B osztálynak nincs saját konstruktora, így a szülő osztály kostruktora hívódik meg, kiírva, hogy 'Én vagyok az A osztály konstruktora. br'.
Figyelem
Sem a PHP 3, sem a PHP 4 nem hívja meg a szülő osztály konstruktorát automatikusan egy leszármazott osztály definiált konstruktorából.
A te feladatod, hogy meghívd a szülő konstruktorát, ha szükséges.
Megjegyzés:
Nem léteznek destruktorok sem a PHP 3 sem a PHP 4 verzióiban.
Bár használhatod a register_shutdown_function() függvényt a destruktorok legtöbb viselkedésének eléréséhez.
A destruktor olyan metódus, ami automatikusan meghívódik, amikor egy objektum megszűnik, akár az unset() A destruktor olyan metódus, ami automatikusan meghívódik, amikor egy objektum megszűnik, akár az unset() meghívásával, akár a környezete megszűnése miatt.
PHP-ben nincsenek destruktorok.
Előző
Tartalom
Következő
Fel