PHP的错误与异常处理
2021-03-19
php
php
字数统计: 1.1k(字)
阅读时长: 4(分)
前言
PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实际需要。
通过日志记录功能,你可以将信息直接发送到其他日志服务器,或者发送到指定的电子邮箱(或者通过邮件网关发送),或者发送到操作系统日志等,从而可以有选择的记录和监视你的应用程序和网站的最重要的部分。
错误报告功能允许你自定义错误反馈的级别和类型,可以是简单的提示信息或者使用自定义的函数进行处理并返回信息。
error :
不能在编译期发现的运行期错误,不如试图用 echo 输出一个未赋值的变量,这类问题往往导致程序或逻辑无法继续下去而需要中断;
exception :
程序执行过程中出现意料之外的情况,逻辑上往往是行得通的,但不符合应用场景,比如接收到一个长度超出预定格式的用户命名,因此,异常主要靠编码人员做预先做判断后抛出,捕获异常后改变程序流程来处理这些情况,不必中断程序。
参考文献
PHP官方文档:https://www.php.net/manual/zh/book.errorfunc.php
Exception预定义异常:https://www.php.net/manual/zh/class.exception.php
错误处理函数:https://www.php.net/manual/zh/ref.errorfunc.php
示例演示
try-catch
try-catch捕获异常
1 2 3 4 5 6 7 8 9 10 11 <?php try { throw new Exception ('an error' ); }catch (\Exception $e ){ echo $e ->getMessage ().PHP_EOL; var_dump ($e ->getCode ()); }
try-catch扩展catch子句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php class MyException extends Exception { public $errType = 'default' ; public function __construct ($errType ='' ) { $this ->errType = $errType ; } } try { throw new MyException ('My an error' ); }catch (MyException $err ){ echo $err ->errType.PHP_EOL; }catch (ErrorException $e ){ echo 'error !' .$e ->getMessage ().PHP_EOL; }catch (Exception $e ){ echo $e ->getMessage ().PHP_EOL; }
Exception异常的回调函数
error_log
error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。如果成功该函数返回 TRUE,如果失败该函数返回 FALSE。
1 2 3 4 5 <?php $test =2 ;if ($test >1 ) { error_log ("触发自定义错误" ,1 ,"someone@example.com" ,"From: webmaster@example.com" ); }
set_error_handler 自定义错误处理函数
该函数用于创建运行期间的用户自己的错误处理方法。该函数返回旧的错误处理程序,如果失败则返回 NULL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php function customError ($errno , $errstr , $errfile , $errline ) { echo "<b>Custom error:</b> [$errno ] $errstr <br />" ; echo " Error on line 错误行数 $errline in $errfile <br />" ; echo "Ending Script" ; die (); } set_error_handler ("customError" );$test =2 ;if ($test >1 ) { trigger_error ("出发自定义错误" ); }
set_exception_handler 自定义异常处理函数
该函数用于创建运行期间的用户自己的异常处理方法。该函数返回旧的异常处理程序,如果失败则返回 NULL。
1 2 3 4 5 6 7 8 9 10 11 <?php function myException ($exception ) { echo "<b>Exception:</b> " , $exception ->getMessage (); } set_exception_handler ('myException' );throw new Exception ('自定义异常处理返回' );
error_get_last 获得最后发生的错误
该函数以数组的形式返回最后发生的错误。如果没有错误发生则返回 NULL
1 2 3 4 5 6 7 8 <?php echo $test + $abc ;print_r (error_get_last ());
register_shutdown_function 注册一个会在php中止时执行的函数
注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。
1 2 3 4 5 6 7 8 9 10 <?php function shutdown ( ) { echo 'Script executed with success' , PHP_EOL; } register_shutdown_function ('shutdown' );