Как напечатать сообщение, когда исключение выдается в деструкторе, вызванном exit () в php?

У меня есть PHP-код, как это:

<?php
class MyDestructableClass {
function __destruct() {
print "Destroying MyDestructableClass";
throw new Exception('Intentionally thrown exception, can it be caught?');
}
}

$obj = new MyDestructableClass();

exit;  // Triggers destructor eventually

?>

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

Я пробовал обработчик исключений:

<?php
class MyDestructableClass {
function __destruct() {
print "Destroying MyDestructableClass";
throw new Exception('Intentionally thrown exception, can it be caught?');
}
}

$obj = new MyDestructableClass();

function myExceptionHandler($exception)
{
print "I noticed an exception was thrown, success!";
}

set_exception_handler('myExceptionHandler');

exit;  // Triggers destructor eventually

?>

но ничего не печатает.

Я также попробовал функцию выключения:

<?php
class MyDestructableClass {
function __destruct() {
print "Destroying MyDestructableClass";
throw new Exception('Intentionally thrown exception, can it be caught?');
}
}

$obj = new MyDestructableClass();

function myShutdownFunction()
{
if (error_get_last() != NULL)  // Only want to react to errors, not normal shutdown
{
print "I noticed an exception was thrown, success!";
}
}

register_shutdown_function('myShutdownFunction');

exit;  // Triggers destructor eventually

?>

но ничего не печатает.

Каким методом можно заметить исключение в деструкторе, которое инициируется методом exit ()?

0

Решение

Это работает для меня. Но я не знаю, если это то, что вы хотите.

<?php

class MyDestructableClass {
function __destruct() {
print "Destroying MyDestructableClass";
throw new Exception('Intentionally thrown exception, can it be caught?');
}
}function RunEverything(){
$obj = new MyDestructableClass();
}

try {
RunEverything();

} catch (Exception $e){
echo 'My error has been thrown';
}exit;
/*
*/

?
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]