Konstruktorok és destruktorok

Konstruktor

void __construct ( [mixed args [, ...]] )

A PHP 5 lehetővé teszi a fejlesztők számára, hogy konstruktor metódust deklaráljanak osztályoknak. Azok az osztályok, melyeknek van konstruktor metódusuk, meghívják ezt a metódust minden egyes újonnan létrehozott objektumon, ezért ez alkalmas bármilyen kezdeti beállításhoz ami az objektum számára szükséges a használata előtt.

Megjegyzés: A szülő konstruktor nem hívódik meg, ha az utód osztály definiál egy konstruktort. A szülő konstruktor futtatásához meg kell hívni a parent::__construct() metódust az utód konstruktorban.

Példa 19-8. Új egységes konstruktorok használata

<?php
class BaseClass {
   function
__construct() {
       print
"BaseClass konstruktor\n";
   }
}

class
SubClass extends BaseClass {
   function
__construct() {
       
parent::__construct();
       print
"SubClass konstruktor\n";
   }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

A visszafelé kompatibilitás érdekében ha a PHP 5 nem talál __construct() függvényt az addot osztályban, megkeresi a régi stílusú konstruktor függvényt, aminek a neve megegyezik az osztályéval. Hathatósan ez azt jelenti, hogy csak akkor van kompatibilitási probléma, ha az osztálynak van egy metódusa __construct() néven és másmilyen a szemantikája (más lenne az eredeti célja, nem az, hogy konstruktor legyen).

Destruktor

void __destruct ( void )

A PHP 5 által bevezetett destruktor hasonló a többi objektum-orientált nyelvekéhez, mint a C++. A destruktor metódus akkor hívódik meg, amint az összes referencia az egyéni objektumhoz vagy amikor az objektum nyíltan megsemmisül.

Példa 19-9. Destruktor példa

<?php
class MyDestructableClass {
   function
__construct() {
       print
"Konstruktor\n";
       
$this->name = "MyDestructableClass";
   }

   function
__destruct() {
       print
$this->name . " megsemmisítése\n";
   }
}

$obj = new MyDestructableClass();
?>

A konstruktorokhoz hasonlóan, a szülő destruktort nem hívja meg a motor közvetlenül. A szülő destruktor futtatásához nyíltan meg kell hívnod a parent::__destruct() metódust a destruktorban.

Megjegyzés: A destruktor a program leállítása során hívódik meg, tehát a fejlécek már mindig el vannak küldve.

Megjegyzés: Kivétel dobása a desturktorból fatális hibát eredményez.