php7.1起支持单个catch块捕获多种异常类型,用竖线(|)分隔类名,需确保无继承关系且已use导入;示例:catch (invalidargumentexception | runtimeexception $e)。

PHP7.1起支持在单个catch块中捕获多种异常类型,避免重复写多个catch语句,提升代码可读性与维护性,尤其适用于需要对不同异常做相同处理逻辑的场景。
使用竖线分隔多个异常类
在catch括号内用【|】符号连接多个具体异常类名,注意只能是类名,不能带命名空间前缀(除非已use导入)。
将异常变量名写在括号末尾,例如:catch (InvalidArgumentException | RuntimeException $e)。
这一步必须确保所有列出的异常类彼此无继承关系,否则会触发致命错误——PHP不允许捕获存在继承关系的异常类型。
配合use关键字简化命名空间引用
若异常类来自深层命名空间(如Symfony\Component\HttpKernel\Exception\NotFoundHttpException),需先use导入。
方法一:逐个use
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
方法二:批量use(PHP7.1+支持)
use Symfony\Component\HttpKernel\Exception\{NotFoundHttpException, AccessDeniedHttpException};
【未use而直接写全限定类名会导致语法错误,PHP7.1不支持在catch中使用反斜杠开头的完整类名】
实际捕获逻辑编写
第一步:编写try块包裹可能抛出异常的代码。
第二步:在catch中声明多类型异常并统一处理。
第三步:可选添加finally块执行收尾操作。
示例:
try {
doSomething();
} catch (LogicException | RuntimeException $e) {
error_log("业务异常或运行时异常:" . $e->getMessage());
}
这一步操作起来很简单,直接把异常类名用|连起来就行,但要注意顺序无关——PHP按类型匹配而非书写顺序。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











