在php中使用自定义异常类有什么意义?

时间:2010-09-17 11:55:56

标签: php exception-handling try-catch

在某些库中,通常的做法是为每个错误条件创建自定义Exception类,例如:

class FileNotFound_Exception extends Exception {}

您可以处理某种类型的Exception,但是您无法读取所有库的所有源代码以记住每个Exception类,并且无法充分利用自定义异常。大部分时间我只是用基本的Exception类来捕获它们:

catch (Exception $e)
{
    // log and display friendly error
}

有没有其他方法可以获得自定义异常类的好处,而无需编写长列表的catch块? 我喜欢Exceptions,但不知道如何正确使用它们。谢谢。

2 个答案:

答案 0 :(得分:8)

拥有自己的Exception类的好处在于,作为库的作者,您可以捕获并处理它。

try {
   if(somethingBadHappens) {
     throw MyCustomException('msg',0)
   }
} catch (MyCustomException $e) {
  if(IcanHandleIt) {
    handleMyCustomException($e);
  } else {
    //InvalidArgumentException is used here as an example of 'common' exception
    throw new InvalidArgumentException('I couldnt handle this!',1,$e);
  }
}

答案 1 :(得分:7)

好吧,自定义异常类可让您正确路由错误以便更好地处理。

如果你有一个班级

class Known_Exception extends Exception {}

和这样的try catch块:

try {
    // something known to break
} catch (Known_Exception $e) {
    // handle known exception
} catch (Exception $e) {
    // Handle unknown exception
}

然后你知道Exception $ e是一个未知的错误情况,可以相应地处理,这对我来说非常有用。