Ответ 1
-
В соответствии с manual деструкторы выполняются, даже если script завершается с помощью
die()
илиexit()
:Деструктор будет вызываться, даже если выполнение script прекращено с использованием функции exit(). Вызов exit() в деструкторе предотвратит выполнение остальных процедур выключения.
-
В соответствии с этим вопросом SO деструктор выполняет не, когда выполняется время выполнения PHP (подтверждено на Apache 2, PHP 5.2 в Windows 7).
-
Деструктор также выполняет не, когда script завершается, потому что достигнут предел памяти. (Только что протестировано)
-
Деструктор выполняет выполнение фатальных ошибок (только что протестировано). Обновление: OP не может подтвердить это. Кажется, что есть фатальные ошибки, в которых все происходит.
-
Он выполняет не выполнение при анализе ошибок (потому что весь script не будет интерпретироваться)
-
Деструктор, конечно же, не будет выполняться, если произойдет сбой сервера или какое-либо другое исключение из управления PHP.
В целом, он выглядит довольно надежно.
Недостаток действий, кроме очистки в деструкторе, заключается в том, что ваши варианты там несколько ограничены. Вы больше не можете генерировать исключения (за исключением случаев, когда вы их снова поймаете внутри деструктора), вы не можете выводить какие-либо сообщения об ошибках, вы не можете больше полагаться на присутствие других объектов (например, интерфейса базы данных)..... У меня нет большого опыта работы с деструкторами, но я не уверен, что то, что вы планируете делать, - это приемлемая идея.