个性化阅读
专注于IT技术分析

如何安全处理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 thrown
            return (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 '';
        }
    }
}

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

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何安全处理PHP错误:__toString()不得抛出异常

评论 抢沙发

评论前必须登录!