📜  PHP-错误和异常处理

📅  最后修改于: 2020-10-21 05:14:04             🧑  作者: Mango


错误处理是捕获程序引发的错误,然后采取适当措施的过程。如果您能够正确处理错误,则可能导致许多不可预见的后果。

在PHP中处理错误非常简单。

使用die()函数

在编写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错误处理功能中检查完整的错误处理功能集