Forum und email

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.

Note: 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.

Example#1 Ú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.

Example#2 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.

Note: 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.

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