【问题标题】:What is the point of using custom exception class in php?在 php 中使用自定义异常类有什么意义?
【发布时间】:2011-04-13 16:48:31
【问题描述】:
在某些库中,为每个错误情况创建自定义异常类是常见的做法,例如:
class FileNotFound_Exception extends Exception {}
您可以处理某些类型的异常,但是您无法阅读所有库的所有源代码来记住每个异常类,并且无法充分利用使用自定义异常。大多数时候我只是用基本的异常类来捕捉它们:
catch (Exception $e)
{
// log and display friendly error
}
是否有其他方法可以受益于自定义异常类,而无需编写长长的 catch 块列表?
我喜欢例外,但不知道如何正确使用它们。谢谢。
【问题讨论】:
标签:
php
exception-handling
try-catch
【解决方案1】:
拥有自己的 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);
}
}
【解决方案2】:
好吧,自定义异常类可让您正确路由错误以便更好地处理。
如果你有课
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 是一个未知的错误情况并且可以相应地处理它,这对我来说非常有用。