【发布时间】:2015-05-11 17:43:55
【问题描述】:
我有一个给定的类,其中包含一些方法,当满足某些错误标准时,其中一个会根据以下情况引发异常:
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 块之外引发异常会在浏览器中产生以下输出:
致命错误:Nem kezdhető új "insert" utasítás。在 /home/uxxxxxxxxx/public_html/test.php 第 87
行
如果我指定自定义异常处理程序,则可以显示原始消息,尽管样式不同。我知道如何模仿 PHP 处理可捕获的致命错误的原始行为,但我确实认为应该显示消息而不需要这样做,纯粹是通过引发未捕获的异常。
注意:将LogicException 交换为Exception 不会改变任何内容。
【问题讨论】:
-
作品here.
-
@hynner 是的,这也是它应该在这里工作的方式。我没有会影响 PHP 对未捕获异常的响应的杂散包含、函数或 ini 覆盖。
-
我会假设您看到的致命错误不是这个 throw 语句的结果,并且您在其他地方还有另一个致命错误。也许发布完整的脚本
test.php或至少将其剥离以消除可能的错误。 -
@JonathanKuhn 这个问题缺少一个小细节,即 original 异常消息本身。原始消息是“Nem kezdhető új INSERT utasítás”,这揭示了问题的真正本质 - 没有 UTF-8 编码的文件中的异常与 UTF-8 字符。我将编辑问题,因为它是解决方案的 key。