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

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,但不知道如何正确使用它们.谢谢.

Mch*_*chl 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);
  }
}
Run Code Online (Sandbox Code Playgroud)


tho*_*alt 7

好吧,自定义异常类允许您正确路由错误以便更好地处理.

如果你有课

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是一个未知的错误情况,并且可以相应地处理它,这对我来说非常有用.