如何在 PHP 中实现异常链

发布于 2024-08-28 09:43:54 字数 563 浏览 7 评论 0原文

PHP异常的构造函数有第三个参数,文档说:

$previous: The previous exception used for the exception chaining. 

但我可以'让它发挥作用。我的代码如下所示:

try
{
    throw new Exception('Exception 1', 1001);
}
catch (Exception $ex)
{
    throw new Exception('Exception 2', 1002, $ex);
}

我期望抛出异常 2,并且我期望它附加异常 1。但我得到的只是:

Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in ...

我做错了什么?

Constructor for PHP's exception has third parameter, documentation says:

$previous: The previous exception used for the exception chaining. 

But I can't make it work. My code looks like this:

try
{
    throw new Exception('Exception 1', 1001);
}
catch (Exception $ex)
{
    throw new Exception('Exception 2', 1002, $ex);
}

I expect Exception 2 to be thrown and I expect that it will have Exception 1 attached. But all I get is:

Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in ...

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜巴黎 2024-09-04 09:43:54

第三个参数需要版本5.3.0。

The third parameter requires version 5.3.0.

感情旳空白 2024-09-04 09:43:54

在 5.3 之前,您只能创建自己的自定义异常类。还建议这样做,我的意思是,如果我 catch (Exception $e) 那么我的代码必须处理所有异常,而不仅仅是我想要的异常,代码会更好地解释它。


    class MyException extends Exception
    {
    protected $PreviousException;

    public function __construct( $message, $code = null, $previousException = null )
    {
        parent::__construct( $message, $code );
        $this->PreviousException = $previousException;
    }
    }

    class IOException extends MyException { }

    try
    {
    $fh = @fopen("bash.txt", "w");
    if ( $fh === false)
        throw new IOException('File open failed for file `bash.txt`');
    }
    catch (IOException $e)
    {
    // Only responsible for I/O related errors
    }

Before 5.3 you can just create your own custom exception class. It is also recommended to do this, I mean if I catch (Exception $e) then my code must handle all exceptions rather then just the one I'm wanting, code explains it better.


    class MyException extends Exception
    {
    protected $PreviousException;

    public function __construct( $message, $code = null, $previousException = null )
    {
        parent::__construct( $message, $code );
        $this->PreviousException = $previousException;
    }
    }

    class IOException extends MyException { }

    try
    {
    $fh = @fopen("bash.txt", "w");
    if ( $fh === false)
        throw new IOException('File open failed for file `bash.txt`');
    }
    catch (IOException $e)
    {
    // Only responsible for I/O related errors
    }
心安伴我暖 2024-09-04 09:43:54

我得到:

Uncaught exception 'Exception' with message 'Exception 1' ...

Next exception 'Exception' with message 'Exception 2' in ...

你使用 php > 5.3?

I get:

Uncaught exception 'Exception' with message 'Exception 1' ...

Next exception 'Exception' with message 'Exception 2' in ...

You using php > 5.3 ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文