2

我有这样定义的自定义异常类:

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

这种方法的问题是它会弄乱堆栈跟踪

4

2 回答 2

1

请不要那样做,他们都不要。

一个异常只是为了描述代码中出现的问题。

建议在某个地方捕获异常,然后处理异常,例如,做日志记录,发出一些警告。

于 2013-07-19T11:06:21.967 回答
1

不。

构造函数中的业务逻辑使您的代码无法测试。

除此之外,执行日志记录不是异常或其发射器的工作,而是异常处理程序的工作是采取适当的措施,其中可能包括在某处记录错误。

于 2013-07-19T10:52:42.413 回答