上周, 我需要使用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转储。
编码愉快!
评论前必须登录!
注册