PHP - 错误处理

首页 / PHP / Error Handling

Error Handling是捕获程序引发的错误,然后采取适当措施的过程。在PHP中处理错误非常简单。

使用die()函数

在编写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_levelerror_message),但最多可以接受五个参数(可选:error_fileerror_lineerror_context)-

error_function(error_level,error_message, error_file,error_line,error_context);
Sr.NoParameter & Description
1

error_level

必需  -  为用户定义的错误指定错误报告级别。必须是一个数值。

2

error_message

必需  -  为用户定义的错误指定错误消息

3

error_file

可选  -  指定发生错误的文件名

4

error_line

可选  -  指定发生错误的行号

5

error_context

可选  -  指定一个数组,其中包含发生错误时正在使用的每个变量及其值

错误级别

这些错误报告级别是用户定义的错误处理程序可用于的不同类型的错误。这些值使用 | 运算符组合使用

Sr.NoConstant & DescriptionValue
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错误处理函数中检查完整的错误处理函数集。

这一章《PHP - 错误处理》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

相关文章

iOS开发高手课 -〔戴铭 - 47讲〕

说透中台 -〔王健 - 14讲〕

分布式协议与算法实战 -〔韩健 - 31讲〕

基于人因的用户体验设计课 -〔刘石 - 33讲〕

将 m3u8 播放列表文件转换为 XML 列表

Laravel如何保存base64数据图像?

消息:try 访问 null 类型值的数组偏移量

Visual Studio Code PHP Intelephense 不断显示不必要的错误

不推荐使用带有花括号的数组和字符串偏移访问语法

如何在 laravel 中使用 phpunit 测试特定的测试类

视频推荐〔06PHP基础——函数(基本了解)〕

更多视频 »
好记忆不如烂笔头。留下你的足迹吧 :)