📅  最后修改于: 2020-10-21 05:14:04             🧑  作者: Mango
错误处理是捕获程序引发的错误,然后采取适当措施的过程。如果您能够正确处理错误,则可能导致许多不可预见的后果。
在PHP中处理错误非常简单。
在编写PHP程序时,应先检查所有可能的错误情况,然后在需要时采取适当的措施。
请尝试以下示例,不要使用/tmp/test.xt文件,也不要使用此文件。
这样,您可以编写有效的代码。使用以上技术,您可以在程序出错时停止程序并显示更有意义和用户友好的消息。
您可以编写自己的函数来处理任何错误。 PHP为您提供了定义错误处理函数的框架。
此函数必须至少能够处理两个参数(错误级别和错误消息),但最多可以接受五个参数(可选:文件,行号和错误上下文)-
error_function(error_level,error_message, error_file,error_line,error_context);
Sr.No | Parameter & Description |
---|---|
1 |
error_level Required – Specifies the error report level for the user-defined error. Must be a value number. |
2 |
error_message Required – Specifies the error message for the user-defined error |
3 |
error_file Optional – Specifies the file name in which the error occurred |
4 |
error_line Optional – Specifies the line number in which the error occurred |
5 |
error_context Optional – Specifies an array containing every variable and their values in use when the error occurred |
这些错误报告级别是用户定义的错误处理程序可用于的不同类型的错误。这些值使用|组合使用运算符
Sr.No | Constant & Description | Value |
---|---|---|
1 |
.E_ERROR Fatal run-time errors. Execution of the script is halted |
1 |
2 |
E_WARNING Non-fatal run-time errors. Execution of the script is not halted |
2 |
3 |
E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser. |
4 |
4 |
E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally |
8 |
5 |
E_CORE_ERROR Fatal errors that occur during PHP’s initial start-up. |
16 |
6 |
E_CORE_WARNING Non-fatal run-time errors. This occurs during PHP’s initial start-up. |
32 |
7 |
E_USER_ERROR Fatal user-generated error. This is like an E_ERROR set by the programmer using the PHP function trigger_error() |
256 |
8 |
E_USER_WARNING Non-fatal user-generated warning. This is like an E_WARNING set by the programmer using the PHP function trigger_error() |
512 |
9 |
E_USER_NOTICE User-generated notice. This is like an E_NOTICE set by the programmer using the PHP function trigger_error() |
1024 |
10 |
E_STRICT Run-time notices. Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code. |
2048 |
11 |
E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but can be caught by a user defined handle (see also set_error_handler()) |
4096 |
12 |
E_ALL All errors and warnings, except level E_STRICT (E_STRICT will be part of E_ALL as of PHP 6.0) |
8191 |
可以使用以下PHP内置库函数来设置所有上述错误级别,其中级别cab是上表中定义的任何值。
int error_reporting ( [int $level] )
以下是创建一个错误处理函数-
Error: [$errno] $errstr - $error_file:$error_line";
echo "
";
echo "Terminating PHP Script";
die();
}
?>
定义自定义错误处理程序后,您需要使用PHP内置库set_error_handler 函数。现在,通过调用一个不存在的函数来检查示例。
Error: [$errno] $errstr - $error_file:$error_line";
echo "
";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
PHP 5具有与其他编程语言相似的异常模型。异常很重要,可以更好地控制错误处理。
让我们在那里解释与异常相关的新关键字。
尝试-使用异常的函数应该在“尝试”块中。如果未触发异常,则代码将照常继续。但是,如果异常触发,则“引发”异常。
抛出-这是触发异常的方式。每个“掷球”必须至少有一个“接球”。
捕获-“捕获”块检索异常并创建一个包含异常信息的对象。
引发异常时,将不执行该语句之后的代码,PHP将尝试查找第一个匹配的catch块。如果未捕获到异常,则将发出PHP致命错误,并显示“未捕获的异常…
可以在PHP中引发和捕获异常(“捕获”)。代码可以放在try块中。
每次尝试都必须至少有一个相应的捕获块。可以使用多个catch块来捕获不同类别的异常。
可以在catch块中引发(或重新抛出)异常。
以下是这段代码,将其复制并粘贴到文件中并验证结果。
getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
在上面的示例中,$ e-> getMessage函数用于获取错误消息。 Exception类可以使用以下功能。
getMessage() -异常消息
getCode() -异常代码
getFile() -源文件名
getLine() -源代码行
getTrace() -backtrace()的n个数组
getTraceAsString() -格式化的跟踪字符串
您可以定义自己的自定义异常处理程序。使用以下函数来设置用户定义的异常处理函数。
string set_exception_handler ( callback $exception_handler )
在这里, exception_handler是发生未捕获的异常时要调用的函数的名称。必须在调用set_exception_handler()之前定义此函数。
getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
在PHP错误处理功能中检查完整的错误处理功能集