抛出异常,传递给构造函数的消息不会出现在 PHP 错误中
Throw Exception, message passed into constructor won't appear in PHP error
我有一个给定的 class,其中包含一些方法,当满足某些错误条件时,其中一个会抛出如下异常:
PHP
if ($this->mode !== null) {
throw new LogicException('Nem kezdhető új "insert" utasítás.');
}
如果我不处理这个错误,PHP 将按预期显示 "Fatal Error" 消息,但不会显示传递到 [=12= 的构造函数的第一个参数中的自定义消息]:
Fatal error: in /home/uxxxxxxxxx/public_html/test.php on line 87
我预计在 try ... catch
块之外抛出异常会在浏览器中产生以下输出:
Fatal error: Nem kezdhető új "insert" utasítás. in /home/uxxxxxxxxx/public_html/test.php on line 87
如果我指定自定义异常处理程序,则可以显示原始消息,尽管采用不同的样式。我知道如何模仿 PHP 处理可捕获的致命错误的原始行为,但我确实认为应该显示该消息而无需这样做,纯粹是通过抛出一个未捕获的异常。
注意:将 LogicException
换成 Exception
不会改变任何东西。
您可以使用 try {...} catch 块包围上述调用,但您需要声明脚本的行为。
捕获时,异常是一个可以包含一些数据的对象(就像您的自定义消息一样)。借助方法,您可以根据自己的意愿提取这些数据。
如果我们看一下 http://php.net/manual/fr/class.logicexception.php,我们可以看到有一个 getMessage(...) 方法,returns 您存储的消息。
您所要做的就是:
try {
// the code reaching the one above
}
catch (LogicException $e) {
echo $e->getMessage();
}
编辑:但在上面提到的,在您的自定义错误之前必须触发另一个错误,因为它不会显示 "Fatal error"
我希望这对你有帮助,抱歉,英语不好:(
注意:我没有在 初始 问题中包含解决方案的关键,即原始消息本身。在问题中,我将消息翻译成英文希望更好的可读性,但原来的消息中有UTF-8字符。
事实证明,问题在于原始邮件,
Nem kezdhető ú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
我有一个给定的 class,其中包含一些方法,当满足某些错误条件时,其中一个会抛出如下异常:
PHP
if ($this->mode !== null) {
throw new LogicException('Nem kezdhető új "insert" utasítás.');
}
如果我不处理这个错误,PHP 将按预期显示 "Fatal Error" 消息,但不会显示传递到 [=12= 的构造函数的第一个参数中的自定义消息]:
Fatal error: in /home/uxxxxxxxxx/public_html/test.php on line 87
我预计在 try ... catch
块之外抛出异常会在浏览器中产生以下输出:
Fatal error: Nem kezdhető új "insert" utasítás. in /home/uxxxxxxxxx/public_html/test.php on line 87
如果我指定自定义异常处理程序,则可以显示原始消息,尽管采用不同的样式。我知道如何模仿 PHP 处理可捕获的致命错误的原始行为,但我确实认为应该显示该消息而无需这样做,纯粹是通过抛出一个未捕获的异常。
注意:将 LogicException
换成 Exception
不会改变任何东西。
您可以使用 try {...} catch 块包围上述调用,但您需要声明脚本的行为。
捕获时,异常是一个可以包含一些数据的对象(就像您的自定义消息一样)。借助方法,您可以根据自己的意愿提取这些数据。
如果我们看一下 http://php.net/manual/fr/class.logicexception.php,我们可以看到有一个 getMessage(...) 方法,returns 您存储的消息。
您所要做的就是:
try {
// the code reaching the one above
}
catch (LogicException $e) {
echo $e->getMessage();
}
编辑:但在上面提到的,在您的自定义错误之前必须触发另一个错误,因为它不会显示 "Fatal error"
我希望这对你有帮助,抱歉,英语不好:(
注意:我没有在 初始 问题中包含解决方案的关键,即原始消息本身。在问题中,我将消息翻译成英文希望更好的可读性,但原来的消息中有UTF-8字符。
事实证明,问题在于原始邮件,
Nem kezdhető ú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