Exception类中的$ previous是什么?

Suh*_*pta 2 php exception

是什么$previousException构造函数的参数分别表示?我该如何使用?

    class MyException extends \Exception {

    private $message;
    private $code;


    public function __construct($message,$code,\Exception $previous=null){
        $this->message = $message;
        $this->code = isset($code) ? $code : 0;
        parent::__construct($message,$code,$previous);      
    }       
}
Run Code Online (Sandbox Code Playgroud)

我没有在API文档中找到任何内容

Ber*_*rak 5

如果由于捕获到异常而引发异常,则可以将原始异常添加为$previous。这意味着您实际上可以“嵌套”异常:

try {
    throw new FooException('Foo exception');
} catch (FooException $e) {
    $code = 1;
    throw new BarException('Bar exception', $code, $e);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以遍历异常“堆栈”,而不仅仅是捕获的异常,从而为您提供更多上下文。

while($e instanceof \Exception) {
    echo $e->getMessage();
    $e = $e->getPrevious();
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您要实现一个可以引发异常的库,则可能会使用此方法,但是您希望将异常包装在自己的库中。这样,您客户的代码只需要知道您的异常,而无需了解代码依赖项所具有的异常,而不会丢失任何信息。