Ar galite pakeisti eilutę vietoj eilutės kaip išimtį php?

Norėčiau perduoti masyvą kaip išimtį php vietoj eilutės. Ar tai galima padaryti, jei apibrėžiate savo klasę, kuri išplečia Išimties klasę?

Pavyzdžiui, throw new CustomException('string', $options = array('params'));

16
23 июля '11 в 2:26 2011-07-23 02:26 john mossel yra nustatytas liepos 23 d., 11 val
@ 4 atsakymai

Žinoma Tai bus tik jūsų klaidų tvarkymo kodui, kuris turėtų žinoti ir naudoti masyvo turtą. Galite nustatyti savo išskirtinės klasės konstruktorių, kad galėtumėte atlikti bet kokius norimus parametrus, ir tada tiesiog įsitikinkite, kad skambinate bazinės klasės konstruktoriumi iš konstruktoriaus apibrėžties, pavyzdžiui:

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

Tada kodo kode ...

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

Pažvelkite į php dokumentus, jei norite išplėsti išimties klasę:

http://php.net/manual/en/>

Manau, kad atsakymas buvo šiek tiek vėlai, bet aš taip pat norėjau pasidalinti savo sprendimu. Turbūt daugiau žmonių ieško to :)

 class JsonEncodedException extends \Exception {  public function __construct($message = null, $code = 0, Exception $previous = null) { parent::__construct(json_encode($message), $code, $previous); }  public function getDecodedMessage($assoc = false) { return json_decode($this->getMessage(), $assoc); } } 
8
29 сент. Atsakymą Rolfas pateikia 29 sep. 2015-09-29 23:52 '15 ne 23:52 2015-09-29 23:52

Taip, galite. Jums reikės išplėsti išimties klasę ir sukurti __construct () metodą, kad galėtumėte tai padaryti.

2
23 июля '11 в 2:31 2011-07-23 02:31 Atsakymą davė Mike liepos 23 d. 11 val

Jei nenorite išplėsti išimties, galite koduoti masyvą į eilutę:

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

Taip pat galite naudoti json_encode / json_decode jei norite.

0
08 янв. atsakymas, kurį pateikė Sinus Mackowaty 08 sausis 2018-01-08 21:11 '18, 21:11 pm 2018-01-08 21:11

Kiti klausimai apie žymas arba Užduoti klausimą