working try tipos not manejador excepciones custom catch php custom-exceptions

tipos - try catch php 7



¿Puedes lanzar una matriz en lugar de una cadena como excepción en php? (4)

Quiero lanzar una matriz como excepción en PHP, en lugar de una cadena. ¿Es posible hacer esto si define su propia clase que extiende la clase Excepción?

Por ejemplo, throw new CustomException(''string'', $options = array(''params''));


Creo que llego un poco tarde con una respuesta, pero también quería compartir mi solución. Probablemente hay más gente buscando esto :)

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); } }


Por supuesto. Solo dependerá de su código de manejo de errores, y de hacer uso de la propiedad de matriz de forma apropiada. Puede definir el constructor de su clase de excepción personalizada para que tome los parámetros que desee, y luego asegúrese de llamar al constructor de la clase base desde la definición del constructor, por ejemplo:

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; } }

Luego, en su código de llamada ...

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

Eche un vistazo a los documentos php para ampliar la clase de excepción:

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


Sí tu puedes. Necesitará extender la clase Excepción y crear un método __construct () para hacer lo que quiera.


Si no desea extender la Excepción, puede codificar su matriz en una cadena:

try { throw new Exception(serialize([''msg''=>"Booped up with %d.",''num''=>123])); } catch (Exception $e) { $data = unserialize($e->getMessage()); if (is_array($data)) printf($data[''msg''],$data[''num'']); else print($e->getMessage()); }

También puede usar json_encode / json_decode si lo prefiere.