使用不同类型的异常或使用不同代码的单个异常类型更好吗?

时间:2016-10-18 12:13:21

标签: php exception-handling

我目前有一个类只抛出一种类型的异常,但有不同的异常代码:

class Foo
{
    public static function method($var)
    {
        if ($condition1) {
            throw new FooException('XXX', 'FORMAT');
        }

        if ($condition2) {
            throw new FooException('XXX', 'RANGE');
        }
        return doSomething($number);
    }
}

class FooException extends Exception
{
    public function __construct($message, $code = 'UNDEFINED_ERROR', Exception $previous = null)
    {
        $this->message  = $message;
        $this->code     = $code;
        $this->previous = $previous;
    }
}

第一个实现和另一个实现不同异常的实现之间是否存在重要差异?

class Bar
{
    public static function method($var)
    {
        if ($condition1) {
            throw new BarFormatException('XXX');
        }

        if ($condition2) {
            throw new BarRangeException('XXX');
        }
        return doSomething($number);
    }
}

class BarFormatException extends Exception
{}

class BarRangeException extends Exception
{}

1 个答案:

答案 0 :(得分:1)

仅使用一个带有附加值的异常类型意味着您必须自己处理每个异常类型,区分每个类型的错误,并注意您不处理的情况,以便您可以重新抛出它们

总而言之,当您使用不同的异常类型时,PHP本身会自动执行 - 更清晰,更快,更不容易出错,因此您不必担心在错误处理中意外引入错误。

此外:自定义异常类型可以具有不同的内部数据,具体取决于它们是什么。