У меня есть 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 ()?
Это работает для меня. Но я не знаю, если это то, что вы хотите.
<?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;
/*
*/
?
Других решений пока нет …