上周, 我需要使用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转储。
编码愉快!
推荐阅读
- 如何使用短语法使用Twig检查变量是否存在以及是否为空
- 每个Twig开发人员都应该能够回答的20个问题的答案和解释
- 如何在Symfony 1.4上使用Composer安装Packagist库
- 如何使Symfony Project 1.4.20与PHP 5.5或5.6完全兼容(不推荐使用(preg_replace()警告))
- 添加自定义android webview错误页面
- 为什么我的android studio 3.5.3中缺少“ app”文件夹
- 以HTML集成WhatsApp jQuery
- [在新计算机上运行项目或删除数据库文件夹时,未在Android Studio中创建SQLite数据库
- 文件的目录查找失败…在操作系统中。 …找不到App_Data /…mdf