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,这个错误是可以捕获的。
不过这两种错误的捕获的前提条件是错误定义在错误发生之前。因为这两种错误都会导致脚本停止运行。