2010-04-09 69 views
11

構造PHP的異常有第三個參數,documentation說:如何實現異常鏈在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 ... 

我在做什麼錯了?

+2

什麼是您的PHP版本? – EFraim 2010-04-09 08:50:11

回答

20

第三個參數需要版本5.3.0。

1

我得到:

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

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

您使用PHP> 5.3?

1

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 
    }