Exception handling PHP5.3异常健全性检查-PHP真的打印内部异常消息吗?
我觉得这有点奇怪 我正在运行一个脚本,它运行一个程序。我将最新的输出存储在变量中。如果程序或我的脚本由于不同的原因导致脚本中出现异常,我会捕获异常,附加错误日志,然后重新播放它。在上面的几个级别,我再次捕获它,记录整个消息,并重新播放它以关闭脚本 当PHP命令行消失时,它似乎只在堆栈跟踪中打印内部异常消息,因为没有提到我的消息。它甚至表示未捕获的“异常”,这是我在测试时抛出的内部异常,而外部异常是自定义类型。getMessage()按预期返回完整的消息Exception handling PHP5.3异常健全性检查-PHP真的打印内部异常消息吗?,exception-handling,php-5.3,Exception Handling,Php 5.3,我觉得这有点奇怪 我正在运行一个脚本,它运行一个程序。我将最新的输出存储在变量中。如果程序或我的脚本由于不同的原因导致脚本中出现异常,我会捕获异常,附加错误日志,然后重新播放它。在上面的几个级别,我再次捕获它,记录整个消息,并重新播放它以关闭脚本 当PHP命令行消失时,它似乎只在堆栈跟踪中打印内部异常消息,因为没有提到我的消息。它甚至表示未捕获的“异常”,这是我在测试时抛出的内部异常,而外部异常是自定义类型。getMessage()按预期返回完整的消息 PHP Fatal error: Unc
PHP Fatal error: Uncaught exception 'Exception' with message 'This is a test error message.' in /home/x/Documents/project/file.php:14
堆栈跟踪:
我疯了吗?这是预期的行为吗?我应该睡觉吗
更新:
在“根”级别,我有以下内容:
catch(Exception $e)
{
$access->logError($e->getMessage());
print 'Actual error: ' . $e->getMessage() . "\n";
print get_class($e);
throw $e;
}
print语句打印我期望的真实消息,即聚合。抛出$e将生成内部异常消息<代码>打印获取类($e)打印自定义异常
这是CustomException的声明:
class CustomException extends Exception
{
function __construct($message, $prev)
{
parent::__construct($message, -1, $prev);
}
}
这就是它的使用方式:
catch(Exception $e)
{
$message = $e->getMessage() . $logString;
$resultReporter->reportError($message);
$e = new CommandException($message, $e);
$throw e;
}
事实证明,在所有这些之后,我想这是预期的行为 当PHP有机会显示异常堆栈时,它所做的似乎是向后向上操作异常堆栈 请参见以下输出:
Rudis-Mac-Pro:~ rudi$ php ex.php
PHP Fatal error: Uncaught exception 'Exception' with message 'I'm an inner exception' in /Users/rudi/ex.php:3
Stack trace:
#0 {main}
Next exception 'Exception' with message 'I'm the outer exception' in /Users/rudi/ex.php:6
Stack trace:
#0 {main}
Next exception 'Exception' with message 'I'm the reeally outer exception' in /Users/rudi/ex.php:8
Stack trace:
#0 {main}
thrown in /Users/rudi/ex.php on line 8
这是由相当基本的代码生成的:
<?php
try {
throw new Exception("I'm an inner exception");
} catch(Exception $ex) {
try {
throw new Exception("I'm the outer exception", -1, $ex);
} catch(Exception $iex) {
throw new Exception("I'm the reeally outer exception", -1, $iex);
}
}
是否确实捕获了内部异常?也许这是一个愚蠢的问题,但可能只是因为这是它实际上在内部处理的唯一例外。@rudi这是一个好问题,请参阅我的更新。我期待着发现我犯了一些错误…只是看了你的更新,我有点困惑。您说您的外部异常属于不同的类型,但您却抛出了原始的异常
?我想我可能错过了什么!或者你根本就没有抛出外部异常(这是你的代码所建议的)。我根本没有看到外部异常:?@rudi,这是我的外部捕获块-我捕获所有异常(然后重试)。再次查看更新:)谢谢!哈哈,如果最内部的异常是最详细的(我的不是,这可能是一件坏事),那就有点道理了,但是如果它打印了“在执行诸如此类的操作时发生了一个错误,在“内部异常”期间失败了”,那就更有意义了。但是谢谢。至少我没有做任何编程错误。