Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Деструкторы в php - какой в них смысл?

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


Ответ

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

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

Отправить комментарий