如何在 PHP 7 和 8 中捕获致命错误?

How to catch a fatal error both in PHP 7 and 8?

我有一个 PHP 7 脚本,基本上是这样做的:

try {
    $class = getClassFromSomewhere();
}
catch(Error $e) {
    if ("Class 'Main' not found" == $e->getMessage()) {
        echo 'Run "php generate-main-class" to generate the class.'.PHP_EOL;
        exit;
    } else {
        throw $e;
    }
}

明确一点:如果我要查找的 class 是“Main”并且无法找到,我必须显示文本,否则它应该会抛出异常。

它与 PHP 7 配合使用效果很好,但 PHP 8 不会捕获错误。相反,它显示:

Fatal error: Uncaught Error: Class "Main" not found in ...

我应该如何以向后兼容的方式在 PHP 8 中捕获“Class 未找到”致命错误?

唯一的区别似乎是 PHP 8 在 class 名称周围使用双引号 -

Class "Main" not found

而之前(如您当前的代码)使用单引号...

Class 'Main' not found

您也可以在尝试代码 () 之前检查 class 是否存在,这可能比导致错误更干净。