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

相关文章:
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 属性及其详细解释ÿ…...
KClass-关于kotlin中的反射
override val responseType: KClass<SetOperationModeResponse> SetOperationModeResponse::class,这段代码的含义: responseType 是一个只读属性(val),它的类型是 KClass<SetOperationModeResponse>。KClass<T&…...
Java集合剖析2】Java集合底层常用数据结构
一、数据结构与集合 接下来就要学习集合具体的实现类了,集合的实现类底层可能用1种或多种数据结构来存储数据。所以在学习集合的实现类前,我们有必要了解一下一些常见的数据结构,这样我们在后面查看集合实现类的底层源码时,才不会…...
java 第10天 String创建以及各类常用方法
一.String创建的两种形式 1.通过new的当时 String strnew String(); 2.不new的方式 String s1""; 二.new 和不new的方式的区别是什么 不new创建的字符串首先是拿着值去常量池中查找,是否有该内容,有就用常量池该字符串的地址࿰…...
VS 解决方案里面.vs文件夹
VS解决方案中的.vs文件夹主要用于存储当前用户在解决方案中的工作配置。 这些配置包括多个方面: 窗口布局和选项卡状态:.vs文件夹记录了VS关闭前最后的窗口布局以及最后打开的选项卡。这样,当用户重新打开解决方案时,可以继续之前…...
初试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…...
十四、行为型(观察者模式)
观察者模式(Observer Pattern) 概念 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象间的一对多依赖关系,当被观察的对象(主题)状态发生改变时,所有依赖…...
爬取简书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操作系统
第一关:Linux的初体验 答案: cd / ls -a / (里面有空格要注意) 第二关:Linux的常用命令 答案: touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关:Linux查询命令帮助语句…...
MySQL 【日期】函数大全(七)
目录 1、UNIX_TIMESTAMP() 将指定的日期/日期时间转为 UNIX 时间戳值。 2、WEEK() 返回给定日期位于当年的第几周。 3、WEEKDAY() 返回给定日期的工作日编号。 4、WEEKOFYEAR() 返回给定日期位于当年的第几周 5、YEAR() 提取日期的年份部分并作为数字返回。 6、YEARWEEK()…...
IP报文格式、IPv6概述
IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下),下面来逐一介绍首部各个字段的含义 Version版本:表示采用哪一种具体的IP协议,对于IPv4来说该字段就填充4以表示,如果是IPv6就填充6IHL首部长度ÿ…...
学习记录:js算法(六十七):任务调度器
文章目录 任务调度器思路一思路二 任务调度器 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个…...
5分钟8图:Cursor如何让编程效率提升5倍?
5分钟8图,看Cursor如何革新AI编程? 作为一名AI编程的实践者,我很高兴为大家介绍Cursor - 一款基于VSCode的创新型集成开发环境(IDE),它巧妙地融合了先进的AI技术,为编程工作带来前所未有的便利。让我们通过多个图表深入了解Cursor的特性和工作流程。 Cursor的核心…...
车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导
FOTA模块中OTA的知识点:1.测试过程中发现哪几类问题? 可能就是一个单键的ecu,比如升了一个门的ecu,他的升了之后就关不上,还有就是升级组合ecu的时候,c屏上不显示进度条。 2.在做ota测试的过程中ÿ…...
PACT 在微服务架构中的用途
在微服务架构盛行的今天,如何确保各个微服务之间的交互正确且稳定成为了一个关键问题。PACT(一种契约测试工具)在这个领域发挥着重要的作用。那么,PACT 在微服务架构中的用途到底是什么呢? 一、微服务架构的挑战 微服…...
LeetCode 3200.三角形的最大高度:枚举
【LetMeFly】3200.三角形的最大高度:枚举 力扣题目链接:https://leetcode.cn/problems/maximum-height-of-a-triangle/ 给你两个整数 red 和 blue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
