这是我的ErrorHandler
课程,我在调用Application
的主ErrorHandler::init();
课程中注册处理程序
我不明白为什么,但在ErrorResponse
和set_error_handler
中找不到课程set_exception_handler
。
然而,课程在register_shutdown_function
中找到......这很奇怪。
你能知道在其他处理程序中找不到ErrorResponse
类的原因是什么?
<?php
namespace tools\exception;
use tools\core\http\ErrorResponse;
class ErrorHandler
{
static public function init()
{
self::_registerNormalErrorHandler();
self::_registerExceptionErrorHandler();
self::_registerFatalErrorHandler();
}
static private function _registerNormalErrorHandler()
{
set_error_handler(function ($err_code, $err_message, $err_file, $err_line)
{
$responseCode = 500;
ErrorResponse::create(
$responseCode,
$err_file,
$err_message,
$err_line,
"set_error_handler")->sendJSON();
die();
});
}
static private function _registerExceptionErrorHandler()
{
set_exception_handler(function ($exception)
{
$responseCode = $exception->getCode();
if(0 === $responseCode)
$responseCode = 500;
ErrorResponse::create(
$responseCode,
$exception->getFile(),
$exception->getMessage(),
$exception->getLine(),
"set_exception_handler")->sendJSON();
die();
});
}
static private function _registerFatalErrorHandler()
{
register_shutdown_function(function ()
{
$last_error = error_get_last();
if( null !== $last_error ) {
$isError = false;
switch ($last_error["type"]) {
// ...
}
if($isError) {
ErrorResponse::create(
500,
$last_error['file'],
$last_error['message'],
$last_error['line'],
$caught)->sendJSON();
}
}
});
}
}