Конструктори и деструктори, Ръководство за PHP
Конструктор
PHP 5 ви позволява да декларирате методи на конструктор. Класове, които декларират метод на конструктор, ще извикват този метод всеки път, когато се създава нов обект, така че това може да бъде полезно, например, за инициализиране на състояние на обект, преди да го използвате.
Забележка : Конструкторите в родителските класове не се извикват автоматично, ако дъщерният клас дефинира свой собствен конструктор. За да извикате конструктор, деклариран в родителски клас, извикайте методаparent::__construct() в конструктора на дъщерния клас. Ако конструкторът не е дефиниран в наследствения клас, тогава той може да бъде наследен от родителския клас като нормален метод (ако не е дефиниран като частен).
Пример #1 Използване на унифицирани конструктори
За обратна съвместимост, ако PHP 5 не може да открие деклариран метод __construct() и този метод не е наследен от родителските класове, тогава конструкторът ще бъде извикан по остарелия начин, чрез извикване на метода, чието име съвпада с името на класа. Може да има само един проблем със съвместимостта със стар код, ако той съдържа класове с методи __construct(), които се използват за други цели.
За разлика от други методи, PHP няма да генерира грешка на нивоE_STRICT, ако __construct() е заменен от метод с различни параметри от тези в родителския __construct().
Считано от PHP 5.3.3, методите с имена, които съответстват на последния елемент от името на класа с пространство от имена, вече няма да се считат за конструктори. Тази промяна не засяга класове, които не са в пространство от имена.
Пример #2 Конструктори вкласове в пространство от имена
Деструктори
PHP 5 въвежда концепцията за деструктори, подобни на тези, използвани в други OO езици като C++. Деструкторът ще бъде извикан, когато всички препратки към посочения обект бъдат освободени или когато скриптът приключи (редът, в който се изпълняват деструкторите, не е гарантиран).
Пример #3 Пример за деструктор
функция __destruct () печат " Унищожава ". $това -> име "\н" ; > >
$obj = нов MyDestructableClass(); ?>
Както при конструкторите, деструкторите, декларирани в родителски клас, няма да бъдат извиквани автоматично. За да извикате деструктор, деклариран в родителски клас, извикайте методаparent::__destruct() в тялото на дъщерния деструктор. Също така дъщерен клас може да наследи деструктора от родителския клас, ако не е дефиниран в него.
Деструкторът ще бъде извикан дори ако скриптът е прекратен с функцията exit(). Извикването на exit() в деструктора ще предотврати изпълнението на всички последващи функции за прекратяване.
Забележка :
Деструкторите, които се извикват, когато скриптът приключи, се извикват след изпращането на HTTP заглавките. Работната директория по време на фазата на завършване на скрипта може да е различна в някои SAPI (напр. Apache).
Забележка :
Опитът да се хвърли изключение в деструктор (извикан по време на завършване на скрипта) води до фатална грешка.