PHP使异常接受数组和对象类型的消息


PHP Make Exception Accept Messages of Array and Object Type

我试图将一个数组传递给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参数以允许这些变量类型?

将自定义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();
}

这取决于您希望消息如何工作。最简单的方法是向构造函数添加一些代码,根据类型将消息转换为字符串。只使用print_r是最简单的。请尝试在传递到父__construct之前添加它。

$message = print_r($message, 1);