在某些库中,通常的做法是为每个错误条件创建自定义Exception类,例如:
class FileNotFound_Exception extends Exception {}
您可以处理某种类型的Exception,但是您无法读取所有库的所有源代码以记住每个Exception类,并且无法充分利用自定义异常。大部分时间我只是用基本的Exception类来捕获它们:
catch (Exception $e)
{
// log and display friendly error
}
有没有其他方法可以获得自定义异常类的好处,而无需编写长列表的catch块? 我喜欢Exceptions,但不知道如何正确使用它们。谢谢。
答案 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是一个未知的错误情况,可以相应地处理,这对我来说非常有用。