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