php的错误处理机制
看tp5源码的,补充下
error_reporting(E_ALL); set_error_handler([__CLASS__, 'appError']); set_exception_handler([__CLASS__, 'appException']); register_shutdown_function([__CLASS__, 'appShutdown']);
第一个是报告所有错误,就一个配置
第二:set_error_handler
function myErrorHandler($errno, $errstr, $errfile, $errline) { echo "<b>Custom error:</b> [$errno] $errstr<br>"; echo " Error on line $errline in $errfile<br>"; } // 设置用户定义的错误处理函数 set_error_handler("myErrorHandler"); $test=2; // 触发错误 if ($test>1) { trigger_error("A custobeen triggered"); }
第三:_exception_handler
function _exception_handler($e) { if ($e instanceof Error) { echo "catch Error: " . $e->getCode() . ' ' . $e->getMessage() . '<br>'; } else { echo "catch Exception: " . $e->getCode() . ' ' . $e->getMessage() . '<br>'; } } set_exception_handler('_exception_handler'); // 注册异常处理方法来捕获异常 throw new Exception('This is a exception', 400); //抛出一个Exception,看是否可以被catch*/
第四:php挂掉之前做下日志的功能
register_shutdown_function('shutdown_function'); try { $a = new A();//这里会报致命错误 echo 5/0; } catch(Exception $e) { echo '异常捕获'; print $e->getMessage(); } function shutdown_function() { echo '捕获错误'; $e = error_get_last(); print_r($e); }
这是php的错误处理函数的基本解释和触发方法。tp5改写了下,值得看看。