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

PHP致命错误:无法抛出未实现Throwable的对象问题求助

解决PHP Fatal Error: Cannot throw objects that do not implement Throwable

嘿,这个问题我太熟了——你碰到的这个PHP致命错误,根源出在你的ShopException类没有遵循PHP的异常规范。

错误原因

在PHP中,只有实现了Throwable接口的对象才能被throw关键字抛出。你当前定义的ShopException只是一个普通的自定义类,并没有和PHP的异常体系挂钩,所以PHP会拒绝抛出它。

修复方案

PHP内置的Exception类已经默认实现了Throwable接口,我们只需要让自定义异常类继承它就行。修改后的ShopException代码如下:

class ShopException extends Exception {
    protected $error;
    protected $errno;

    function __construct($error, $errno) {
        // 调用父类构造方法,兼容标准异常的用法(比如getMessage())
        parent::__construct($error);
        $this->error = $error;
        $this->errno = $errno;
    }

    function geterror() {
        return $this->error;
    }

    // 可选:添加获取错误码的方法,让类功能更完整
    function getErrno() {
        return $this->errno;
    }
}

额外说明

  • 继承Exception后,你的自定义异常不仅能被正常抛出,还能使用标准异常类的所有方法(比如getLine()、getFile()),这在调试时会非常有用。
  • 调用parent::__construct($error)是个好习惯,即使你自己定义了geterror()方法,也能保证和PHP原生异常的行为兼容。

这样修改后,你原来的if ($err){ throw new ShopException($err, $errno); }代码就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:57