Exception handling PHP5.3异常健全性检查-PHP真的打印内部异常消息吗?

Exception handling PHP5.3异常健全性检查-PHP真的打印内部异常消息吗?,exception-handling,php-5.3,Exception Handling,Php 5.3,我觉得这有点奇怪 我正在运行一个脚本,它运行一个程序。我将最新的输出存储在变量中。如果程序或我的脚本由于不同的原因导致脚本中出现异常,我会捕获异常,附加错误日志,然后重新播放它。在上面的几个级别,我再次捕获它,记录整个消息,并重新播放它以关闭脚本 当PHP命令行消失时,它似乎只在堆栈跟踪中打印内部异常消息,因为没有提到我的消息。它甚至表示未捕获的“异常”,这是我在测试时抛出的内部异常,而外部异常是自定义类型。getMessage()按预期返回完整的消息 PHP Fatal error: Unc

我觉得这有点奇怪

我正在运行一个脚本,它运行一个程序。我将最新的输出存储在变量中。如果程序或我的脚本由于不同的原因导致脚本中出现异常,我会捕获异常,附加错误日志,然后重新播放它。在上面的几个级别,我再次捕获它,记录整个消息,并重新播放它以关闭脚本

当PHP命令行消失时,它似乎只在堆栈跟踪中打印内部异常消息,因为没有提到我的消息。它甚至表示未捕获的“异常”,这是我在测试时抛出的内部异常,而外部异常是自定义类型。getMessage()按预期返回完整的消息

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,这是我的外部捕获块-我捕获所有异常(然后重试)。再次查看更新:)谢谢!哈哈,如果最内部的异常是最详细的(我的不是,这可能是一件坏事),那就有点道理了,但是如果它打印了“在执行诸如此类的操作时发生了一个错误,在“内部异常”期间失败了”,那就更有意义了。但是谢谢。至少我没有做任何编程错误。