我有一个给定的类,其中包含一些方法,其中一个在满足某些错误标准时会按以下方式抛出异常:
PHP
if ($this->mode !== null) {
throw new LogicException('Nem kezdhető új "insert" utasítás.');
}
如果我不处理此错误,PHP将按预期显示“致命错误”消息,但不会显示传递给LogicException
构造函数的第一个参数的自定义消息:
致命错误:在 /home/uxxxxxxxxx/public_html/test.php 上 87
我希望在try ... catch
块之外抛出异常会在浏览器中产生以下输出:
致命错误:Nemkezdhetőúj“insert”utasítás。在 /home/uxxxxxxxxx/public_html/test.php 上 87
如果我指定自定义异常处理程序,则可以显示原始消息,尽管是以不同的样式。我知道如何模仿PHP处理可捕获的致命错误的原始行为,但我确实认为应该显示消息而不要求它,纯粹是通过抛出一个未捕获的异常。
注意:将LogicException
换成Exception
不会改变任何内容。
答案 0 :(得分:3)
注意:我没有在初始问题中包含解决方案的密钥,即原始邮件本身。在这个问题中,我将消息翻译成英文,以期提高可读性,但原来的内容中有UTF-8字符。
事实证明,问题在于原始消息
Nemkezdhetőúj“insert”utasítás。
包含UTF-8字符,如果在没有UTF-8编码的文件中使用,则会破坏异常处理。相应地切换文件编码解决了这个问题。
以下主题有许多质量答案,用于描述问题:PHP 5.4 throw exception - Can't see message with ISO-8859-1 encoded string message
答案 1 :(得分:0)
您可以使用try {...} catch块来包围上述调用,但是您可以根据自己的需要声明脚本的行为。
捕获时,异常是一个可以包含某些数据的对象(就像使用自定义消息一样)。您可以根据自己的意愿提取这些数据。
如果我们查看http://php.net/manual/fr/class.logicexception.php,我们可以看到有一个getMessage(...)方法可以返回您存储的消息。
你所要做的就是:
try {
// the code reaching the one above
}
catch (LogicException $e) {
echo $e->getMessage();
}
编辑:但如上所述,在您的自定义之前必须触发另一个错误,因为它不会显示“致命错误”
我希望这对你有所帮助,对不好的英格拉多道歉:(