Деструктор PHP

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

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

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

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

Уборщик мусора PHP удаляет неиспользуемые объекты, но это может занять некоторое время, а до того момента за неиспользуемым объектом будут закреплены ресурсы. Используя деструктор, мы гарантируем, что ни один ресурс не задействуется впустую, он повышает эффективность приложений и сайтов. Если мы говорим об одном объекте, то использование деструктора не даст заметных изменений.

Но если приложение сложное, и в нем используется множество объектов, в этом случае использование PHP-деструктора может дать существенный эффект.

Синтаксис деструктора PHP

Согласно основам ООП PHP, при объявлении деструктора используется обозначение магических методов - два подчеркивания в начале и ключевое слово destruct:

__destruct();

Деструктор в PHP нельзя вызвать явно, так же, как мы не можем вызвать явно конструктор:

$myobject -> __destruct();                    - невозможно

Еще один важный момент, касающийся деструктора: так же, как и конструктор, он вызывается для объекта только один раз - в момент удаления объекта.

Пример деструктора PHP

Ниже приводится простой пример деструктора PHP:

public function __destruct() {
    print "{$this->Name} is destroyed...n";
}

Этот деструктор выводит сообщение о том, что объект удален. Мы можем закрыть соединение сокета с базой данных, однако я не пишу этот код. На самом деле весь процесс будет сложнее.

Надеюсь, вы разобрались в общем принципе работы деструктора:

public function __destruct() {
    Поместите в скобках ИСПОЛНЯЕМЫЙ КОД.
}

Другой ООП PHP пример полного кода деструктора и конструктора:

<?php
class Car{
   function __construct() {
       print "In constructorn";
       $this->name = "Car";
   }

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

$obj = new Car();
?>

В PHP ООП деструктор вызывается только один раз. Лучше всего использовать Parent::_destruct(). Но родительский деструктор следует вызывать после того места, где размещается код деструктора, чтобы быть уверенным, что объект не будет удален, прежде чем он был использован в приложении.

Смотрите приведенный ниже пример:

public function __destruct() {
    print "{$this->Name} is destroyed...n";
    parent:: _destruct();
}