PHP:自定义错误和异常默认处理程序

2016-10-13

自定义错误和异常默认处理程序

  • 通过set_exception_handler来处理那些没有被try–catch捕获的异常(exception)
  • 通过set_error_handler来处理php脚本的错误,比如用trigger_error抛出的错误
  • set_exception_handler

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function exception_handler($e)
    {
    echo $e->getMessage();
    }
    set_exception_handler('exception_handler');
    throw new Exception('我发生了错误', 2);
    echo '???';

    可以看到上面抛出的异常没有try–catch来捕获,默认情况下,如果没有设置自定义的异常处理函数,它会自动调用php自己的处理方法,显示一个错误看起来是这样的:

    Fatal error: Uncaught Exception: 我发生了错误 in...

    现在设置了set_exception_handler会使用自定义的这个函数去处理,而传入的是一个Exception对象。

    在 exception_handler 调用后异常会中止
    所以,不会输出???这行字。

  • set_error_handler

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /**
    * 处理脚本中的错误
    * @param int $errno 错误级别
    * @param string $msg 错误消息
    * @param string $file 文件名
    * @param int $line 错误发生行号
    */
    function error_handler($errno, $msg, $file, $line)
    {
    echo '发生了一个错误,级别'.$errno.'讯息:'
    .$msg.'文件'.$file.'在'.$line.'行';
    }
    set_error_handler('error_handler');
    trigger_error('发生错误了',E_USER_WARNING);

    这样,在发生一些错误的时候就能使用自定义的错误捕获程序,但这个东西不是什么都能捕获的。
    有责任在其中使用die()来结束函数的运行。

Tags: PHP