Деструкторы

Возможность объявления деструкторов может быть весьма полезной. Деструктор может вести лог отладочных сообщений, закрывать соединения с базой данных и т.п. В PHP4 отсутствовала поддержка деструкторов, хотя имелась возможность указать функцию, которая вызывается при завершении работы скрипта.

PHP5 поддерживает деструкторы, аналогично другим объектно-ориентированным языкам, таким как Java. Когда последняя ссылка на объект уничтожена, прежде, чем память, выделенная объекту, уничтожается, вызывается метод класса с именем __destruct() без каких-либо параметров.

Пример:

class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = “MyDestructableClass”;
}

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

$obj = new MyDestructableClass();
?>

Подобно конструкторам, деструкторы базовых классов не вызываются автоматически. Для вызова деструктора базового класса необходимо явно указать вызов метода parent::__destruct() в коде деструктора.

[fixxxer] Примечание: само собой разумеется, при портировании PHP4-скриптов возможной несовместимостью будет наличие методов __destruct(), используемых в других целях. Видимо, в связи с мизерной вероятностью такого случая разработчики не сочли нужным об этом упомянуть.

Март 11, 2008 — Рубрика: PHP
Метки: ,

Единое имя конструкторов

PHP5 позволяет определить метод-конструктор класса. Классы, имеющие конструктор, вызывают его для каждого создаваемого объекта. Обычно конструкторы используются для присваивания переменным-элементам класса начальных значений, необходимых до использования объекта.

В PHP4 конструктором явзяется метод, который называется так же, как сам класс. Так как часто необходимо вызывать конструктор базового класса из класса производного, такой принцип именования конструкторов затрудняет работу со сложной иерархией классов. Если базовый класс изменен, приходится также менять имя вызываемого конструктора базового класса в коде производного класса.

В PHP5 введен стандартный способ объявления конструктора класса. Конструктором в PHP5 является метод с именем __construct().

Пример:
class BaseClass {
function __construct() {
print "В конструкторе базового класса BaseClass\n";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "В конструкторе производного класса SubClass\n";
}
}

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

Для обратной совместимости, предусмотрено следующее: если PHP5 не находит функцию __construct() в определении данного класса, используется старый стиль именования конструкторов. Таким образом, единственный случай несовместимости при переходе на PHP5 - присутствие в объявлении класса метода с именем __construct().

Март 9, 2008 — Рубрика: PHP
Метки: ,