2013-06-20 1 views
0

Я пытаюсь передать массив в класс Exception, и я получаю сообщение об ошибке с указанием:PHP Make Exception Accept сообщения массива и типа объекта

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

Очевидно, это означает, что стандартный класс исключений не обрабатывать эти типы переменных, поэтому я хотел бы расширить класс 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);