деструктор класса PHP

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

Конструктор класса — это специальный метод, который автоматически вызывается в момент создания объекта (например: $car=new Car ()). В php конструктор класса носит название __construct(двойное подчеркивание):

function __construct(){
echo "Object created!";
}

При создании объекта какого-нибудь класса мы пишем например: $fruit = new Fruit (). Эти круглые скобки не что иное, как круглые скобки конструктора (function __construct () ). Т.е. если мы что-то передадим в скобках объекта, оно попадет в скобки конструктора.

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

Когда у нас код заканчивается, все объекты удаляются. Или можно удалить объект и раньше (unset ($obj)). Ситуация похоже на конструктор, т.е. я хочу, чтобы при удалении объекта (неважно как), что-то произошло. Для этого применяют деструкторы. Т.е. это специальный метод, который автоматически вызывается при удалении объекта. В php этот метод называют __destruct ().

function __destruct(){
echo "object deleted!";
}

Внимание! Передавать в деструктор в круглые скобки ничего нельзя.

Порядок удаления объектов не определен. Т.е. объекты удалятся, как захочет сам php. Поэтому есть негласное правило — из деструктора не обращаться к другим объектам, т.к. на момент вызова того объекта он может уже быть удален.

Совместимость в PHP4 и PHP5

В PHP4 не было понятия деструктора. Понятие конструктора в php4 было, но служебного имени метода __construct не было. Конструктором в php4 был метод, одноименный с методом класса. Т.е. если класс называется ‘car’, то и конструктор так же. Совместимость в php5 осталась. Т.е. php5 при создании объекта сначала ищет метод __construct, если он его не находит, то ищет метод, одноименный с методом класса. Если этот метод php нашел, то считает его конструктором.

А если метод __construct будет в коде, то одноименный метод станет простым методом класса.




Добавить комментарий

Ваш e-mail не будет опубликован.