hjd*_*jdm 6 php exception-handling try-catch
在某些库中,通常的做法是为每个错误条件创建自定义Exception类,例如:
class FileNotFound_Exception extends Exception {}
Run Code Online (Sandbox Code Playgroud)
您可以处理某种类型的Exception,但是您无法读取所有库的所有源代码以记住每个Exception类,并且无法充分利用自定义Exceptions.大多数时候我只是用基类Exception类来捕获它们:
catch (Exception $e)
{
// log and display friendly error
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以获得自定义异常类的好处,而无需编写长列表的catch块?我喜欢Exceptions,但不知道如何正确使用它们.谢谢.
拥有自己的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);
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,自定义异常类允许您正确路由错误以便更好地处理.
如果你有课
class Known_Exception extends Exception {}
Run Code Online (Sandbox Code Playgroud)
和这样的try catch块:
try {
// something known to break
} catch (Known_Exception $e) {
// handle known exception
} catch (Exception $e) {
// Handle unknown exception
}
Run Code Online (Sandbox Code Playgroud)
然后你知道Exception $ e是一个未知的错误情况,并且可以相应地处理它,这对我来说非常有用.