我目前正在开发一个具有自定义错误处理的小型网站(或者更确切地说,错误可视化),并且我遇到了涉及这两个错误的特定功能的问题和异常捕获。
所以,我有这段代码:
<?
$query = SQL::Query("SELECT * FROM sitevars");
if ( !$query )
{
Kernel::Log('Could not retrieve sitevars.', 3, true);
return false;
}
正如您所看到的,如果查询为false,则应该使用Kernel::Log
方法如果第三个参数等于true,那么负责启动异常的Kernel::Log
块被写为如下:
<?
if ( $kill )
{
$backtrace = debug_backtrace();
$caller = array_shift($backtrace);
echo "test";
throw new Exception($message." near line ".$caller['line']." on file ".$caller['file']);
}
现在,问题在于,即使打印了test
,异常处理程序也会被 调用。我在__construct
类
Kernel
方法上设置了异常处理程序
<?
public function __construct()
{
global $config;
self::$modList = array('Kernel');
spl_autoload_register('Kernel::LoadModule');
register_shutdown_function('Kernel::Shutdown');
set_exception_handler('Kernel::Exception');
set_error_handler('Kernel::Error', E_ALL);
}
现在,我已经触发了其他文件的错误,所以我知道至少错误处理程序正在运行,但即使我已经对各种文件执行了throw new Exception('test')
,也没有异常被捕获。
为什么会发生这种情况?