PHP中的错误捕获

PHP错误捕捉函数

错误捕获函数列表

  • set_error_handler
  • set_exception_handler
  • register_shutdown_function


set_error_handler

说明

设置用户自定义的错误处理函数。 该函数会返回旧的错误处理程序,若失败,则返回 null

在运行脚本前的错误,不会用到这个自定义错误程序。

set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed

参数 描述
error_function 必需。规定发生错误时运行的函数
error_types 可选。规定在哪个错误报告级别会显示用户定义的错误。默认是 E_ALL


示例1

<?php
//error handler function
function myError($errno, $errstr, $errfile, $errline) {
    echo "<b>Error:</b> [$errno] $errstr<br />";
    echo "Error on line $errline in $errfile<br />";
    echo "Ending Script";
    die();
}

//set error handler
set_error_handler("myError");

//trigger error
trigger_error("A custom error has been triggered");


示例2

class EHandler{
    //error handler function
    function myError($errno, $errstr, $errfile, $errline) {
        echo "<b>Error:</b> [$errno] $errstr<br />";
        echo "Error on line $errline in $errfile<br />";
        echo "Ending Script";
        die();
    }
}

//set error handler
set_error_handler(array("EHandler","myError"));

//trigger error
trigger_error("A custom error has been triggered");


注意

以下级别的错误不能由用户定义的函数来处理:

  • E_ERROR

  • E_PARSE

  • E_CORE_ERROR

  • E_CORE_WARNING

  • E_COMPILE_ERROR

  • E_COMPILE_WARNING

  • 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT


set_exception_handler

说明

该函数用于创建运行时期间的用户自己的异常处理方法。该函数会返回旧的异常处理程序,若失败,则返回 null。在这个异常处理程序被调用后,脚本会停止执行。

set_exception_handler ( callable $exception_handler ) : callable

参数 描述
error_function 必需。规定未捕获的异常发生时调用的函数


示例1

<?php
//Exception handler function 
function myException($exception) {
    echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');

示例2

<?php
//Exception handler class 
class EHandler{
    function myException($exception) {
        echo "<b>Exception:</b> " , $exception->getMessage();
    }
}

set_exception_handler(array('EHandler','myException'));
throw new Exception('Uncaught Exception occurred');

register_shutdown_function

说明

注册一个会在php中止时执行的函数。注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

register_shutdown_function ( callable $callback [, mixed $parameter]) : void

参数 描述
callback 待注册的中止回调。中止回调是作为请求的一部分被执行的,因此可以在它们中进行输出或者读取输出缓冲区。
parameter 可以通过传入额外的参数来将参数传给中止函数

示例1

function myShutdown(){
    echo 'Script executed with success', PHP_EOL;
}

register_shutdown_function('myShutdown');

注意

以下情况不会执行错误处理函数

  • 程序有语法错误(片面)

  • 调用register_shutdown_function函数调用之前发生了致命错误

  • 调用register_shutdown_function函数之前有exit()函数调用


必读

php中语法错误是Parse error,有些文章会说不能捕获,这是片面的。

如果这个错误发生的文件和注册函数所在的文件不是同一个文件,错误是可以被捕获的。

Fatal error错误级别仅限于Parse error,这个错误是可以捕获的。

不过这两种错误的捕获的前提条件是错误定义在错误发生之前。因为这两种错误都会导致脚本停止运行。

qrcode

创建时间:2020-07-05 11:37:00

最后修改:2020-07-05 12:38:41