众所周知set_error_handler函数注册的错误处理器不能处理部分致命错误,而error_get_last()和register_shutdown_function()又不能对错误本身进行处理。可是Laravel居然做到了。很想知道其中的原理。(Symfony\Component\Debug\Exception\FatalErrorException)
学习是最好的投资!
register_shutdown_function。
register_shutdown_function
<?php function handle() { $error = error_get_last(); var_dump($error); } register_shutdown_function('handle'); hahah();
具体处理可看Symfony\Component\Debug\ErrorHandler,考虑很全面。
Symfony\Component\Debug\ErrorHandler
/** * Bootstrap the given application. * * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ public function bootstrap(Application $app) { $this->app = $app; error_reporting(-1); set_error_handler([$this, 'handleError']); set_exception_handler([$this, 'handleException']); register_shutdown_function([$this, 'handleShutdown']); if (! $app->environment('testing')) { ini_set('display_errors', 'Off'); } }
详细处理请见Illuminate\Foundation\Bootstrap\HandleExceptions
register_shutdown_function
。具体处理可看
Symfony\Component\Debug\ErrorHandler
,考虑很全面。详细处理请见Illuminate\Foundation\Bootstrap\HandleExceptions