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
相关产品推荐
相关产品推荐

