如何安全处理PHP错误(__toString()不得抛出异常)

上周, 我需要使用Symfony 1.4进行一个旧项目。我决定安装作曲家, 以便能够安装许多PHP库, 而不必依赖单个Sf 1.4插件。我需要的库之一是Kint, 它是PHP花哨的调试器, 用于显示数据库中某些行的某些数据。这些行是由Doctrine 1带来的, 但是由于某种原因, 我得到了一个恒定错误, 即SomeTableClass抛出了” 错误:__toString()一定不能抛出异常” 异常。
该错误当然不是在Kint库中, 而是我要显示的实体类的问题。 Kint在你要调试的任何类上强制使用魔术__toString方法, 但是该类导致异常, 因为该属性根本不存在, 因此你需要在该类的魔术方法上添加try-catch语句你有错误的地方:

class YourClassThatThrowsAnException {// ..// Original Code of your class// ..public function __toString() {try {// Note that the property needs to exist// on the class, or therefore the exception// will be thrownreturn (string) $this-> getName(); } catch (Exception $exception) {// Optionally you can var_dump the error message to see why the exception is being thrown !var_dump($exception-> getMessage()); return ''; }}}

【如何安全处理PHP错误(__toString()不得抛出异常)】请注意, 正如我们在评论中所说, 你将需要返回一个存在且始终为字符串值的属性, 否则将引发另一个异常。此外, 如果你确定该属性存在, 这将非常有用, 可以在catch块中添加var_dump行, 以便可以查看PHP生成的消息以了解失败的原因。当属性不存在时, 我们返回一个空字符串以覆盖错误, 因此无论如何我都可以使用Kint转储。
编码愉快!

    推荐阅读