Error Handling是捕获程序引发的错误,然后采取适当措施的过程。在PHP中处理错误非常简单。
在编写PHP程序时,应先检查所有可能的错误情况,然后在需要时采取适当的措施。
请尝试以下示例,但不要使用 /tmp/test.xt 文件,也不要使用此文件。
<?php if(!file_exists("/tmp/test.txt")) { die("File not found"); }else { $file=fopen("/tmp/test.txt","r"); print "Opend file sucessfully"; } //Test of the code here. ?>
这样,您可以编写有效的代码。使用以上技术,您可以在程序出错时停止程序并显示更有意义和用户友好的消息。
您可以编写自己的函数来处理任何错误。 PHP为您提供了定义错误处理函数。
此函数必须至少能够处理两个参数(error_level和error_message),但最多可以接受五个参数(可选:error_file,error_line和error_context)-
error_function(error_level,error_message, error_file,error_line,error_context);
Sr.No | Parameter & Description |
---|---|
1 | error_level 必需 - 为用户定义的错误指定错误报告级别。必须是一个数值。 |
2 | error_message 必需 - 为用户定义的错误指定错误消息 |
3 | error_file 可选 - 指定发生错误的文件名 |
4 | error_line 可选 - 指定发生错误的行号 |
5 | error_context 可选 - 指定一个数组,其中包含发生错误时正在使用的每个变量及其值 |
这些错误报告级别是用户定义的错误处理程序可用于的不同类型的错误。这些值使用 | 运算符组合使用
Sr.No | Constant & Description | Value |
---|---|---|
1 | .E_ERROR 致命的运行时错误。脚本的执行被暂停 | 1 |
2 | E_WARNING 非致命的运行时错误。脚本的执行不会停止 | 2 |
3 | E_PARSE 编译时解析错误。解析错误应仅由解析器生成。 | 4 |
4 | E_NOTICE 运行时通知。该脚本发现了可能是错误的内容,但在正常运行脚本时也可能发生 | 8 |
5 | E_CORE_ERROR PHP初始启动期间发生的致命错误。 | 16 |
6 | E_CORE_WARNING 非致命的运行时错误。这是在PHP的初始启动过程中发生的。 | 32 |
7 | E_USER_ERROR 用户生成的致命错误。这就像程序员使用PHP函数trigger_error()设置的E_ERROR一样 | 256 |
8 | E_USER_WARNING 非致命的用户生成的警告。这就像程序员使用PHP函数trigger_error()设置的E_WARNING一样 | 512 |
9 | E_USER_NOTICE 用户生成的通知。这就像程序员使用PHP函数trigger_error()设置的E_NOTICE一样 | 1024 |
10 | E_STRICT 运行时通知。使PHP可以建议对代码进行更改,以确保最佳的互操作性和代码的前向兼容性。 | 2048 |
11 | E_RECOVERABLE_ERROR 可捕获的致命错误。这就像一个E_ERROR,但是可以由用户定义的句柄捕获(另请参见set_error_handler()) | 4096 |
12 | E_ALL 除E_STRICT级外的所有错误和警告(从PHP 6.0开始,E_STRICT将成为E_ALL的一部分) | 8191 |
可以使用以下PHP内置库函数来设置所有上述错误级别,其中级别cab是上表中定义的任何值。
int error_reporting ( [int $level] )
以下是创建一个错误处理函数的方法-
<?php function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line"; echo "<br />"; echo "Terminating PHP Script"; die(); } ?>
定义自定义错误处理程序后,您需要使用PHP内置库 set_error_handler 函数进行设置。现在,通过调用一个不存在的函数来检查异常。
<?php error_reporting( E_ERROR ); function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line"; echo "<br />"; echo "Terminating PHP Script"; die(); } //set error handler set_error_handler("handleError"); //trigger error myFunction(); ?>
PHP 5具有与其他编程语言相似的异常模型,异常很重要,可以更好地控制错误处理。
让无涯教程在那里解释与异常相关的新关键字。
Try - 使用异常的函数应位于" try"块中。
Throw - 这是触发异常的方式,每个"throw"必须至少有一个"catch"。
Catch - "catch"块检索异常并创建一个包含异常信息的对象。
以下是这段代码,将其复制并粘贴到文件中并验证输出。
<?php try { $error='Always throw this error'; throw new Exception($error); //Code following an exception is not executed. echo 'Never executed'; }catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } //Continue execution echo 'Hello World'; ?>
在上面的示例中,$e->getMessage函数用于获取错误消息。异常类可以使用以下函数。
getMessage() - 异常消息
getCode() - 异常代码
getFile() - 源文件名
getLine() - 源代码行
getTrace() - backtrace()的n个数组
getTraceAsString() - 格式化的跟踪字符串
您可以定义自己的自定义异常处理程序。使用以下函数来设置用户定义的异常处理函数。
string set_exception_handler ( callback $exception_handler )
exception_handler 是未捕获的异常发生时要调用的函数的名称。必须在调用set_exception_handler()之前定义此函数。
<?php function exception_handler($exception) { echo "Uncaught exception: " , $exception->getMessage(), "\n"; } set_exception_handler('exception_handler'); throw new Exception('Uncaught Exception'); echo "Not Executed\n"; ?>
在 PHP错误处理函数中检查完整的错误处理函数集。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)