Класове и обекти (PHP 5)
PHP Manual

Конструктори и деструктори

Конструктор

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

PHP 5 позволява на разработчиците да декларират конструктори на класовете. Класове, които имат метод-конструктор, извикват този метод при всяко създаване на нов обект, така че той е много подходящ за извършване на инициализации, от които обектът се нуждае преди да бъде използван.

Забележка: Конструкторите на родителските класове не се извикват автоматично, ако в даден дъщерен клас е дефиниран конструктор. За да се изпълни конструкторът на родителския клас, е необходимо да се извика parent::__construct() в тялото на конструктора на дъщерния клас.

Example #1 Използване на нови, унифицирани конструктори

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

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

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

Поради обратната съвместимост, ако PHP 5 не може да намери в даден клас метод __construct(), той ще потърси конструктор дефиниран по начина, по който се дефинира конструктор в по-старите версии, т.е. чрез функция с името на самия клас. На практика това означава, че може да възникнат проблеми при съвместимостта, единствено ако класът е имал метод __construct(), който е имал друг смисъл.

Деструктор

void __destruct ( void )

В PHP 5 е въведен деструкторен метод, по подобие на другите обектно-ориентирани езици като C++. Деструкторът ще се извика в момента, в който обектът бъде унищожен.

Example #2 Пример за деструктор

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

   function 
__destruct() {
       print 
"Destroying " $this->name "\n";
   }
}

$obj = new MyDestructableClass();
?>

Също както в случая с конструктора и тук деструкторът на родителския клас няма да бъде извикан автоматично. За да се изпълни деструкторът на родителския клас е необходимо изрично да се извика parent::__destruct() в тялото на деструктора.

Забележка: Деструкторите се извикват по време на спирането на скрипта, при което HTTP заглавките са изпратени. Работната директория по време на процеса на спирането на скрипта може да бъдат различна при някои SAPI-та (като например Apache).

Забележка: Опитът да се хвърли изключение в тялото на деструктор (извикан по време на приключване на работа на скрипта) ще предизвика фатална грешка.


Класове и обекти (PHP 5)
PHP Manual