我的自定义异常类定义如下:
class EPPException extends Exception
{
public function __construct($text, $code, $message = null)
{
EPPHelper::logError($text, $code, $this->getTraceAsString, $message);
parent::__construct($text, $code, null);
}
}
抛出异常
throw new EPPException($text, $code, $message);
我的问题是 - 从设计的角度来看,使用构造函数不仅可以初始化对象,还可以执行一些额外的任务,例如在这种情况下调用静态方法,这是否可以接受?
更新
另一种选择是创建一个处理日志记录并抛出异常的静态方法
class EPPException extends Exception
{
public function __construct($text, $code, $message = null)
{
parent::__construct($text, $code, null);
}
}
public static function raiseException($text, $code, $message = mull)
{
EPPHelper::logError($text, $code, $this->getTraceAsString, $message);
throw new EPPException($text, $code, $message);
}
EPPHElper::raiseExeption($text, $code);
这种方法的问题在于它会弄乱堆栈跟踪
答案 0 :(得分:1)
没有
Business logic in the constructor makes your code untestable.
除此之外,执行日志记录不是异常或其发射器的作用,异常处理程序的作用是采取适当的操作,其中可能包括在某处记录错误。
答案 1 :(得分:1)
请不要那样做,也不要那样做。
仅用于描述代码中出现的问题的例外。
建议在某个地方捕获异常,然后处理异常,例如,记录,发出一些警告。