PHP提供五种异常处理方法:一、try-catch捕获并处理异常;二、多个catch按顺序匹配不同异常类型;三、finally执行必运行的清理操作;四、自定义异常类主动抛出;五、set_exception_handler设置全局未捕获异常处理器。

如果在PHP程序执行过程中发生错误,程序会中断运行并抛出异常。以下是捕获与处理这些异常的多种方法:
一、使用try-catch语句块捕获异常
PHP通过try-catch结构实现异常的捕获与处理,将可能抛出异常的代码放入try块中,对应的处理逻辑放在catch块内。
1、在PHP脚本中编写包含可能抛出异常的代码段,例如文件读取或数据库连接操作。
2、用try关键字包裹该代码段,并在其后紧跟一个或多个catch语句。
立即学习“PHP免费学习笔记(深入)”;
3、每个catch语句指定要捕获的异常类类型,例如Exception或其子类。
4、在catch块内部编写错误日志记录、用户提示或备用逻辑等处理代码。
二、使用多个catch块处理不同异常类型
当程序可能抛出多种异常时,可通过多个catch块分别捕获对应类型的异常,实现差异化处理。
1、在try块之后依次列出多个catch语句,每个catch声明不同的异常类参数。
2、确保更具体的异常类(如PDOException)写在更通用的异常类(如Exception)之前。
3、每个catch块中可执行独立的响应动作,例如对数据库异常重试,对文件异常提示路径错误。
4、注意:PHP按catch声明顺序匹配,一旦匹配成功即执行对应块,后续catch不再检查。
三、使用finally块执行清理操作
finally块中的代码无论是否发生异常都会执行,适用于资源释放、连接关闭等必须完成的操作。
1、在最后一个catch块之后添加finally关键字及花括号包裹的语句。
2、将文件句柄关闭、数据库连接释放、临时文件删除等逻辑写入finally块。
3、即使try中使用return语句提前退出,finally块仍会在函数返回前执行。
4、finally不能阻止异常向上传播,但可确保关键清理步骤不被跳过。
四、自定义异常类并主动抛出
通过继承Exception类创建特定业务场景的异常类型,便于识别和统一管理。
1、定义新类,例如class ValidationException extends Exception {}。
2、在业务逻辑校验失败处使用throw new ValidationException('用户名格式错误');主动抛出。
3、在调用位置用对应的catch (ValidationException $e) { ... }捕获该类型异常。
4、自定义异常类可添加额外属性(如错误码、字段名),增强调试信息。
五、设置全局异常处理器
当未被捕获的异常向上冒泡至脚本顶层时,可通过set_exception_handler注册统一处理函数。
1、定义一个接受Exception对象为参数的回调函数,例如function handleUncaught($e) { ... }。
2、在脚本初始化阶段调用set_exception_handler('handleUncaught')进行注册。
3、该函数内可记录完整堆栈、发送告警邮件、显示友好错误页等。
4、全局处理器仅对未被任何catch捕获的异常生效,不影响已有try-catch逻辑。











