2013-06-20 56 views
0

我想傳遞一個數組的Exception類的數組和對象類型的消息,我得到一個錯誤,指出:PHP進行異常接受

PHP Fatal error: Wrong parameters for Exception([string $exception [, long $code [, Exception $previous = NULL]]]) 

顯然,這意味着標準的Exception類不處理這些變量類型,所以我想擴展Exception類到一個自定義異常處理程序,它可以使用字符串,數組和對象作爲消息類型。

class cException extends Exception { 

    public function __construct($message, $code = 0, Exception $previous = null) { 
     // make sure everything is assigned properly 
     parent::__construct($message, $code, $previous); 
    } 

} 

什麼需要我的自定義異常發生重新格式化$message參數允許這些變量類型?

回答

1

爲您的自定義異常添加自定義getMessage()函數,因爲無法覆蓋最終的getMessage。

class CustomException extends Exception{ 
    private $arrayMessage = null; 
    public function __construct($message = null, $code = 0, Exception $previous = null){ 
     if(is_array($message)){ 
      $this->arrayMessage = $message; 
      $message = null; 
     } 
     $this->exception = new Exception($message,$code,$previous); 
    } 
    public function getCustomMessage(){ 
     return $this->arrayMessage ? $this->arrayMessage : $this->getMessage(); 
    } 
} 

當捕捉CustomException,調用getCustomMessage()將返回無論你在$消息參數已經通過

try{ 
    .. 
}catch(CustomException $e){ 
    $message $e->getCustomMessage(); 
} 
1

這取決於你希望你的消息如何工作。最簡單的方法是將一些代碼添加到構造函數中,根據類型將消息轉換爲字符串。只使用print_r是最簡單的。嘗試添加此之前傳遞給父__construct。

$message = print_r($message, 1);