当前位置: 首页 > news >正文

php中的错误和异常捕获

目录

一: 异常(Exceptions)

二: 错误(Errors)

三:实际项目的异常和错误处理


在PHP中,异常(Exceptions)和错误(Errors)是两个不同的概念,尽管它们都与运行时问题有关,但它们有各自的用途和处理方式。

一: 异常(Exceptions)

异常是在程序运行时发生的,可以预期并且通常被设计为在特定条件下被抛出的异常条件。它们通常用于处理可恢复的问题,比如文件未找到、数据库连接失败等。

捕获异常:

你可以使用 try...catch 结构来捕获和处理异常。

try {  

      //业务代码;  
    } catch (Exception $e) {  

    echo '异常捕获: ',  $e->getMessage(), "\n";  
    }

    
$e->getLine() 返回异常或错误发生的行号。
$e->getMessage() 返回异常或错误的描述消息。
$e->getFile() 返回发生异常或错误的文件名。
$e->getTraceAsString() 返回一个包含异常或错误堆栈跟踪的字符串。堆栈跟踪显示了异常或错误被抛出时程序执行的调用栈。

这个错误很重要哦,当我们的业务调用比较复杂时,可以通过这个发现发生错误的各个代码的行数,方便找到最终的错误源头。

二: 错误(Errors)

错误通常是由不可恢复的问题引起的,比如语法错误、类型错误、调用未定义的函数等。在PHP 7之前,错误通常会导致脚本终止执行,并且没有内置的机制来捕获它们。然而,从PHP 7开始,引入了一个名为 Error 的异常类,使得某些类型的错误可以被捕获和处理,类似于异常。

从PHP 7开始,你可以使用 Throwable 接口来同时捕获异常和错误。

例如

try {  
    // 可能抛出异常或错误的代码  
} catch (Throwable $t) {  
    // 处理异常和错误  
    echo '捕获到异常或错误: ', $t->getMessage(), "\n";  
}

当然你可以做thinkphp6中这样捕获因为Exception继承了Throwable

try {  
    // 可能抛出异常或错误的代码  
} catch (Exception $e) {  
    // 处理异常和错误  
    echo '捕获到异常或错误: ', $e->getMessage(), "\n";  
}

当然在实际使用中发现Exception并不能捕获所有的错误,比如函数名找不到可能捕获不到,需要Error中捕获

try {  
                        // 可能抛出异常或错误的代码  
      } catch( \Exception $e) {

               echo  $e->getMessage();

      } catch (\Error $e) {
                echo  $e->getMessage();
     }

三:实际项目的异常和错误处理

  1. 全局异常处理
    • 使用一个全局的异常处理器(通过 set_exception_handler() 设置)来捕获未被捕获的异常。
    • 在全局异常处理器中,记录错误日志、发送错误报告给开发人员或显示一个用户友好的错误页面。
  2. 错误处理
    • 对于PHP 7及以上版本,使用 Error 类和 Throwable 接口来捕获错误。
    • 设置一个全局的错误处理函数(通过 set_error_handler()),但请注意,它不能捕获所有类型的错误(如致命错误和解析错误)。
    • 在错误处理函数中,根据错误的类型和严重性决定是抛出异常、记录日志还是显示错误页面。
  3. 日志记录
    • 使用一个日志记录库(如Monolog)来记录错误和异常信息。
    • 确保日志包含足够的上下文信息,如时间戳、用户ID(如果适用)、请求URI、错误类型和消息、堆栈跟踪等。
    • 将日志文件存储在安全的位置,并限制对它们的访问。
  4. 用户友好的错误页面
    • 为生产环境配置一个自定义的错误页面,该页面应简洁明了,避免显示过多的技术细节。
    • 在开发环境中,可以显示更详细的错误信息,以帮助开发人员快速定位问题。

 

http://www.lryc.cn/news/463704.html

相关文章:

  • nextjs项目中,使用postgres的完整案例
  • tsconfig.json 内容解读
  • KClass-关于kotlin中的反射
  • Java集合剖析2】Java集合底层常用数据结构
  • java 第10天 String创建以及各类常用方法
  • VS 解决方案里面.vs文件夹
  • 初试PostgreSQL数据库
  • springboot3导出数据库数据到excel
  • 十四、行为型(观察者模式)
  • 爬取简书1
  • 基于STM32单片机设计的矿山环境作业安全监测系统
  • 大数据linux操作系统
  • MySQL 【日期】函数大全(七)
  • IP报文格式、IPv6概述
  • 学习记录:js算法(六十七):任务调度器
  • 5分钟8图:Cursor如何让编程效率提升5倍?
  • 车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导
  • PACT 在微服务架构中的用途
  • LeetCode 3200.三角形的最大高度:枚举
  • ssm基于java的招聘系统设计与开发+vue
  • 【网络原理】TCP/IP五层网络模型之网络层-----IP协议详解,建议收藏!!
  • 三次握手与四次挥手
  • awk命令学习记录
  • 科大讯飞嵌入式面试题及参考答案
  • C Lua5.4.6 SDK开发库
  • 无线网卡知识的学习-- wireless基础知识(cfg80211)
  • Next.js 学习 - 路由系统(Routing)
  • Unity XR PICO 手势交互 Demo APK
  • EM算法学习
  • 019_基于python+django食品销售数据分析系统2024_4032ydxt