我收到一个关于我的类__toString()
方法中引发的异常的错误,即使其中有try...catch()
。我做了一些跟踪,结果发现 in 我的实例中的一个对象在其 __toString()
中抛出异常,这意味着它不是被包含的班级抓住了#39;捉!
我写了一些测试代码作为演示:
class test {
public function __toString() {
try {
$b = new b();
echo (string)$b;
} catch (exception $e) {
return (string)$e;
}
}
}
class b {
public function __toString() {
throw new Exception ("test");
}
}
$test = new test();
echo $test;
我原以为异常总是“冒出来”#34;通过代码直到它们被抓住或完全消失。
这有什么解决方法吗?我班上的实例来自图书馆;我不知道我是否可以通过自己的__toString()
对其进行维护修改。
答案 0 :(得分:1)
每个PHP magic methods docs中的__toString()
部分:
警告
您不能在__toString()方法中抛出异常。干 所以会导致致命的错误。
执行代码段时,您会收到一条消息,说明同样的事情:
PHP致命错误:方法b :: __ toString()不得抛出异常
有一个功能请求here来支持这一点,它声明在当前状态下很难实现。
说了这么多,解决这个问题的正确方法是向上游库提交一个补丁,不要从该方法中抛出异常。
如果无法做到这一点,那么您的解决方法不是:
echo (string)$b;
写
echo $b->__toString();
在这种情况下,您可以按预期捕获异常。