当前位置: 首页 > 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. 用户友好的错误页面
    • 为生产环境配置一个自定义的错误页面,该页面应简洁明了,避免显示过多的技术细节。
    • 在开发环境中,可以显示更详细的错误信息,以帮助开发人员快速定位问题。

 

相关文章:

php中的错误和异常捕获

目录 一: 异常(Exceptions) 二: 错误(Errors) 三:实际项目的异常和错误处理 在PHP中,异常(Exceptions)和错误(Errors)是两个不同的…...

nextjs项目中,使用postgres的完整案例

目的 通过此案例,可以简单快速的过一下数据库的操作,熟悉app-router这种模式下,client component和server component的两种组件中基本的接口使用。 技术栈 nextjs14.2.* app-routervercel/postgres0.10.*typescript5 重要事情说三遍1 ap…...

tsconfig.json 内容解读

tsconfig.json 文件是 TypeScript 项目的主要配置文件,用于指定编译选项和项目设置。通过这个文件,你可以控制编译器的行为,例如输出文件的路径、模块解析方式、严格类型检查等。 以下是一些常见的 tsconfig.json 属性及其详细解释&#xff…...

KClass-关于kotlin中的反射

override val responseType: KClass<SetOperationModeResponse> SetOperationModeResponse::class,这段代码的含义&#xff1a; responseType 是一个只读属性&#xff08;val&#xff09;&#xff0c;它的类型是 KClass<SetOperationModeResponse>。KClass<T&…...

Java集合剖析2】Java集合底层常用数据结构

一、数据结构与集合 接下来就要学习集合具体的实现类了&#xff0c;集合的实现类底层可能用1种或多种数据结构来存储数据。所以在学习集合的实现类前&#xff0c;我们有必要了解一下一些常见的数据结构&#xff0c;这样我们在后面查看集合实现类的底层源码时&#xff0c;才不会…...

java 第10天 String创建以及各类常用方法

一.String创建的两种形式 1.通过new的当时 String strnew String(); 2.不new的方式 String s1""; 二.new 和不new的方式的区别是什么 不new创建的字符串首先是拿着值去常量池中查找&#xff0c;是否有该内容&#xff0c;有就用常量池该字符串的地址&#xff0…...

VS 解决方案里面.vs文件夹

VS解决方案中的.vs文件夹主要用于存储当前用户在解决方案中的工作配置。 这些配置包括多个方面&#xff1a; 窗口布局和选项卡状态&#xff1a;.vs文件夹记录了VS关闭前最后的窗口布局以及最后打开的选项卡。这样&#xff0c;当用户重新打开解决方案时&#xff0c;可以继续之前…...

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…...

springboot3导出数据库数据到excel

一、导入依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.3.0</version></dependency><d…...

十四、行为型(观察者模式)

观察者模式&#xff08;Observer Pattern&#xff09; 概念 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了对象间的一对多依赖关系&#xff0c;当被观察的对象&#xff08;主题&#xff09;状态发生改变时&#xff0c;所有依赖…...

爬取简书1

import osfrom selenium.webdriver.common.by import By from selenium import webdriver from selenium.webdriver.edge.service import Service import timeimport pandas as pdfrom selenium.webdriver.common.action_chains import ActionChainsdef get_aws():# 如果 WebDr…...

基于STM32单片机设计的矿山环境作业安全监测系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 模块的技术详情介绍【1】BC26-NBIOT模块【2】DHT11温湿度模块【3】PM2.5粉尘模块二…...

大数据linux操作系统

第一关&#xff1a;Linux的初体验 答案&#xff1a; cd / ls -a / &#xff08;里面有空格要注意&#xff09; 第二关&#xff1a;Linux的常用命令 答案&#xff1a; touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关&#xff1a;Linux查询命令帮助语句…...

MySQL 【日期】函数大全(七)

目录 1、UNIX_TIMESTAMP() 将指定的日期/日期时间转为 UNIX 时间戳值。 2、WEEK() 返回给定日期位于当年的第几周。 3、WEEKDAY() 返回给定日期的工作日编号。 4、WEEKOFYEAR() 返回给定日期位于当年的第几周 5、YEAR() 提取日期的年份部分并作为数字返回。 6、YEARWEEK()…...

IP报文格式、IPv6概述

IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下)&#xff0c;下面来逐一介绍首部各个字段的含义 Version版本&#xff1a;表示采用哪一种具体的IP协议&#xff0c;对于IPv4来说该字段就填充4以表示&#xff0c;如果是IPv6就填充6IHL首部长度&#xff…...

学习记录:js算法(六十七):任务调度器

文章目录 任务调度器思路一思路二 任务调度器 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表&#xff0c;用字母 A 到 Z 表示&#xff0c;以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成&#xff0c;但有一个限制&#xff1a;两个…...

5分钟8图:Cursor如何让编程效率提升5倍?

5分钟8图&#xff0c;看Cursor如何革新AI编程? 作为一名AI编程的实践者,我很高兴为大家介绍Cursor - 一款基于VSCode的创新型集成开发环境(IDE),它巧妙地融合了先进的AI技术,为编程工作带来前所未有的便利。让我们通过多个图表深入了解Cursor的特性和工作流程。 Cursor的核心…...

车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…...

PACT 在微服务架构中的用途

在微服务架构盛行的今天&#xff0c;如何确保各个微服务之间的交互正确且稳定成为了一个关键问题。PACT&#xff08;一种契约测试工具&#xff09;在这个领域发挥着重要的作用。那么&#xff0c;PACT 在微服务架构中的用途到底是什么呢&#xff1f; 一、微服务架构的挑战 微服…...

LeetCode 3200.三角形的最大高度:枚举

【LetMeFly】3200.三角形的最大高度&#xff1a;枚举 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-height-of-a-triangle/ 给你两个整数 red 和 blue&#xff0c;分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形&#xff0c;满足第 1 行…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...