Intereting Posts
PHP CodeIgniter: файл не загружается достаточно быстро, и он продолжает процесс без файла Как я могу полностью удалить PHPUnit с помощью установщика PEAR? убедитесь, что результат метода выборки PDO «false» – это ошибка или пустой результат Объединение двух SQL-запросов PDO quickblox javascript sdk один к одному видеочат APC – невозможно загрузить динамическую библиотеку Проверить имя пользователя существует с помощью PHP и PDO? WooCommerce: назначение конечной точки настраиваемому шаблону на моих учетных страницах PHP читает и записывает JSON из файла Необходимо переписать функцию отображения даты Как отображать данные в индексе Yii2, например, в виде карты Процессы php-cgi не закрываются после завершения выполнения скриптов – PHP5.3.3, Win Server 2003, apache PHP Если else указывает, что запись в базе данных пуста, будет отображаться изображение по умолчанию PHP, повторение массива в строку разделенных запятыми значений Сохранять и загружать входные значения с помощью локального хранилища?

Существуют ли случаи, когда деструктор в PHP НЕ вызывается?

Это моя первая публикация в stackoverflow, но я эти темы очень помогли мне!

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

Огромное спасибо!

  • Согласно руководству деструкторы выполняются, даже если сценарий заканчивается с помощью функции die() или exit() :

    Деструктор будет вызываться, даже если выполнение сценария прекращается с помощью функции exit (). Вызов exit () в деструкторе предотвратит выполнение остальных процедур выключения.

  • В соответствии с этим вопросом SO деструктор не выполняется, когда достигается время выполнения PHP (подтверждено на Apache 2, PHP 5.2 в Windows 7).

  • Деструктор также не выполняется, когда скрипт завершается, потому что достигнут предел памяти. (Только что протестировано)

  • Деструктор запускается на фатальных ошибках (только что протестировано). Обновление: OP не может подтвердить это. Кажется, это фатальные ошибки, когда все по-другому

  • Он не выполняется на ошибках разбора (потому что весь скрипт не будет интерпретироваться)

  • Деструктор, конечно же, не будет выполнен, если произойдет сбой сервера или какое-либо другое исключение из управления PHP.

В целом, он выглядит довольно надежно.

Однако недостаток в том, чтобы делать что-то помимо очистки в деструкторе, заключается в том, что ваши варианты там несколько ограничены. Вы больше не можете генерировать исключения (за исключением случаев, когда вы их снова поймаете внутри деструктора), вы не можете выводить какие-либо сообщения об ошибках, вы не можете больше полагаться на присутствие других объектов (например, интерфейса базы данных). …. У меня нет большого опыта работы с деструкторами, но я не уверен, что то, что вы планируете делать, – это приемлемая идея.

Я бы просто хотел добавить, если у вас есть фатальная ошибка внутри деструктора, он может остановить выполнение других деструкторов.