You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

何时在Exception前加反斜杠\,何时不加?

PHP中catch异常时带反斜杠与不带反斜杠的区别

核心区别完全由命名空间决定,具体分两种场景:

1. 代码处于全局命名空间(无自定义namespace)

此时两种写法完全等价,没有任何区别。
Exception是PHP内置的全局类,直接写catch(Exception $e)会自动匹配全局命名空间下的Exception;而catch(\Exception $e)只是显式声明要使用全局命名空间的类,效果完全一致。

示例:

try {
    throw new Exception("测试异常");
} catch(Exception $e) {
    // 正常捕获
    echo $e->getMessage();
} catch(\Exception $e) {
    // 和上面的catch逻辑完全一样,不会走到这里(因为前面已经捕获)
    echo $e->getMessage();
}

2. 代码处于自定义命名空间

这时候区别就非常明显了:

  • catch(Exception $e):PHP会尝试在当前自定义命名空间下查找Exception类。如果你的命名空间里没有定义这个类,代码会直接报错。
  • catch(\Exception $e):显式指定要捕获全局命名空间下的PHP内置Exception类,不受当前命名空间影响,能正确捕获系统异常。

示例:

namespace MyProject\Services;

try {
    // 抛出全局异常
    throw new \Exception("数据库连接失败");
} catch(Exception $e) {
    // 报错:找不到MyProject\Services\Exception类
} catch(\Exception $e) {
    // 正确捕获全局异常,输出错误信息
    echo $e->getMessage();
}

如果想在命名空间下不用写反斜杠,也可以通过use语句导入全局Exception:

namespace MyProject\Services;
use Exception; // 把全局Exception导入到当前命名空间

try {
    throw new Exception("数据库连接失败");
} catch(Exception $e) {
    // 正常捕获全局异常
    echo $e->getMessage();
}

内容的提问来源于stack exchange,提问作者pheromix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:47:06