15

PHPの例外のコンストラクターには、3番目のパラメーターがあります

$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 ...

私は何が間違っているのですか?

4

3 に答える 3

23

3番目のパラメーターにはバージョン5.3.0が必要です。

于 2010-04-09T08:50:17.867 に答える
3

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
    }
于 2013-05-12T22:32:10.927 に答える
1

私は得る:

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

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

php> 5.3を使用していますか?

于 2010-04-09T08:52:23.790 に答える