iplaton
@iplaton

Почему не вызывается деструктор объекта при удалении его с помощью unset?

Долго не мог понять почему какая-то фигня в логике программы происходит. Выяснил, что деструктор вызывается при окончательном завершении скрипта. Я понимаю конечно, сборщик мусора умнее всех и знает лучше программиста кода удалять объекты. Зачем тогда функция unset?
  • Вопрос задан
  • 289 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Mysterion
Зачем тогда функция unset

Чтобы высвободить память и удалить объект, например.
Вы что-то делаете не так, если у Вас при попытке удалить объект с помощью функции unset не вызывается метод __destruct.
Вероятно, этот класс вызван где-то еще.
Ответ написан
Комментировать
@artem78
Причём тут вообще сборщик мусора? Функция unset() помечает переменную как более неиспользуемую, что влечёт вызов деструктора объекта.

Следующий код ведёт себя в точности так как и преполагается:
<?php

class Foo {
	function __construct() {
		print("Object created\n");
	}
	
	function __destruct() {
		print("Object destroyed\n");
	}
}


$foo = new Foo();

print("Before unset()\n");
unset($foo);
print("After unset()\n");

Object created
Before unset()
Object destroyed
After unset()

https://ideone.com/Geaqs4

Если убрать unset() деструктор будет вызван при выходе переменной из области видимости (т.е. в данном примере - при завершении работы скрипта).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы