php - 为什么要使用多个 PHP Exception 类

标签 php exception-handling

我承认我并没有经常使用异常,有时我很难 100% 掌握 PHP 中的异常,这可能部分是因为 PHP 没有最好的错误 => 异常支持,但我仍然这样做对他们了解不多。

以下面这段代码为例,它定义了 4 个不同的类,它们除了扩展基异常类之外什么都不做。我很好奇为什么人们不直接调用 Exception 以及为什么他们有所有这些单独的类。

我认为有充分的理由吗?

class OptimizeImageException extends Exception {};

class FileNotFoundException extends OptimizeImageException {};

class FileNotImageException extends OptimizeImageException {};

class ModuleNotFoundException extends OptimizeImageException {};

最佳答案

通过拥有多个 Exception 类,您可以在捕获它们时挑选出您感兴趣的一个。

<?php                                                                       
class OptimizeImageException extends Exception {};

class FileNotFoundException extends OptimizeImageException {};

class FileNotImageException extends OptimizeImageException {};

class ModuleNotFoundException extends OptimizeImageException {};

try {
  throw new FileNotImageException();
} catch (FileNotFoundException $x) {
  echo "NOT FOUND!";
  // do something about it
} catch (FileNotImageException $x) {
  echo "NOT IMAGE!";
  // do something about it
} catch (Exception $x) {
  echo "UNKNOWN EXCEPTION!";
  // do something else about it
}

这是一个简单的例子,但假设您有一个函数 loadImage() 应该加载图像。如果功能失败,您可以对不同的失败场景进行不同的处理。如果你总是抛出一个基本的Exception,你就只知道出了问题。你不知道出了什么问题,所以你不能根据不同的场景有不同的恢复响应,而不是不使用另一种机制(这会使异常变得相当弱)。

关于php - 为什么要使用多个 PHP Exception 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783066/

相关文章:

php - home_url() 与 get_option ('home' 之间的区别)

java中的java.lang.NullPointerexception

c++ - 什么是 “exception vomiting” ?

c++ - try-catch block 是否会降低性能

php - 在浏览其他页面时上传多个文件 - 如何?

php - Mysql 两小时之间获取数据

javascript - 无法从 phpmyadmin 生成饼图

php - Selenium 与 SimpleTest 与 WatiN

ios - 捕获 dispatch_once block 中产生的异常

php - PHP : Ignoring errors and notices in a specific class