Можете ли вы передать массив вместо строки в качестве исключения в php?

Я хочу передать массив как исключение в php вместо строки. Можно ли это сделать, если вы определяете свой собственный класс, который расширяет класс Exception?

Например, throw new CustomException('string', $options = array('params'));

Конечно. Это будет только для вашего кода обработки ошибок, который должен знать и использовать свойство массива соответствующим образом. Вы можете определить конструктор настраиваемого класса исключения, чтобы выполнить любые параметры, которые вы хотите, а затем просто обязательно вызовите конструктор базового класса из определения конструктора, например:

 class CustomException extends \Exception { private $_options; public function __construct($message, $code = 0, Exception $previous = null, $options = array('params')) { parent::__construct($message, $code, $previous); $this->_options = $options; } public function GetOptions() { return $this->_options; } } 

Затем в вашем кодовом коде …

 try { // some code that throws new CustomException($msg, $code, $previousException, $optionsArray) } catch (CustomException $ex) { $options = $ex->GetOptions(); // do something with $options[]... } 

Взгляните на php docs для расширения класса исключения:

http://php.net/manual/en/language.exceptions.extending.php

Я думаю, что я немного опоздал с ответом, но я тоже хотел поделиться своим решением. Есть, вероятно, больше людей, которые ищут это 🙂

 class JsonEncodedException extends \Exception { /** * Json encodes the message and calls the parent constructor. * * @param null $message * @param int $code * @param Exception|null $previous */ public function __construct($message = null, $code = 0, Exception $previous = null) { parent::__construct(json_encode($message), $code, $previous); } /** * Returns the json decoded message. * * @param bool $assoc * * @return mixed */ public function getDecodedMessage($assoc = false) { return json_decode($this->getMessage(), $assoc); } } 

Да, ты можешь. Вам нужно будет расширить класс Exception и создать метод __construct (), чтобы делать то, что вы хотите.