我正在尝试将数组传递给Exception类,我收到一条错误说明:
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
参数以允许这些变量类型?
答案 0 :(得分:1)
这取决于您希望消息的工作方式。最简单的方法是向构造函数添加一些代码,根据类型将消息转换为字符串。只使用print_r是最简单的。尝试在传递给父__construct之前添加它。
$message = print_r($message, 1);
答案 1 :(得分: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(),它将返回您在$ message参数中传递的内容
try{
..
}catch(CustomException $e){
$message $e->getCustomMessage();
}