Деструктор класса в PHP

Деструктор - это специальный метод, который выполняется самым последним в момент уничтожения объекта и используется для освобождения занятых в конструкторе ресурсов. Для его вызова в классе необходимо создать специальный метод с названием "__destruct()".

Приведём пример, в классе "MyDestruct" объявим метод конструктор, в котором пропишем сообщение "Конструктор класса 'MyDestruct'", метод "echo_method" - сообщение "Метод - echo_method", а в деструктор пропишем "Деструктор класса 'MyDestruct'".

Деструктор был введён начиная с версии 5. Допускается объявление закрытого деструктора, но при этом попытка уничтожения объекта заканчивается выводом предупреждения.

Warning: Call to private point::__destruct from context '' during shutdown ignored

Использование деструктора:


class MyDestruct {

	# Реализация конструктора.
	function __construct() {
		echo '<div>Конструктор класса "MyDestruct"</div>';
	}

	# Реализация Метода - echo_method.
	public function echo_method() {
		echo '<div>Метод - echo_method класса "MyDestruct"</div>';
	}

	# Реализация деструктора.
	function __destruct() {
		echo '<div>Деструктор класса "MyDestruct"</div>';
	}

}

Создание объекта, в котором используется деструктор:


$_Class_MyDestruct = new MyDestruct();
echo $_Class_MyDestruct->echo_method();
echo '<div>Просто текст</div>';

Результат:


Конструктор класса "MyDestruct"
Метод - echo_method класса "MyDestruct"
Просто текст
Деструктор класса "MyDestruct"

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

Поведение деструктора при создании одноимённого объекта:


for ($class = 0; $class < 3; $class ++) {
	$_Class_MyDestruct = new MyDestruct();
}

echo '<div>Просто текст</div>';

Результат:


Конструктор класса "MyDestruct"
Конструктор класса "MyDestruct"
Деструктор класса "MyDestruct"
Конструктор класса "MyDestruct"
Деструктор класса "MyDestruct"
Просто текст
Деструктор класса "MyDestruct"

При создании объекта сначала вызывается конструктор, создающий объект, затем ссылка переключается со старого объекта на новый, и только после этого вызывается деструктор. Это необходимо при создании нового объекта для того чтобы старый объект освободил ресурсы, например закрыл файл.



Комментировать

captcha

Сайты:



Новые отзывы о сайтах:

Авторизация

Если у Вас нет учетной записи, зарегистрируйтесь

captcha

Напомнить пароль
Создание учётной записи

captcha

Напомнить пароль

captcha

Войти в личный кабинет