我承认我并没有经常使用异常,有时我很难 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/