有没有办法在不创建变量的情况下捕获异常?

在PHP中,我有时会用try/catch捕捉一些异常:

try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
}

使用这种代码,我最终会得到一个零(大量资源)创建的变量,并且PHP_MD(PHP Mess Detector)会因为未使用的变量而创建警告。$e


答案 1

从 PHP 8 开始,可以使用非捕获捕获。

这是相关的RFC,以48-1的赞成票数获得。

现在,可以执行如下操作:

try {
    readFile($file);
} catch (FileDoesNotExist) {
    echo "File does not exist";
} catch (UnauthorizedAccess) {
    echo "User does not have the appropriate permissions to access the file";
    log("User attempted to access $file");
}

这样,对于异常详细信息不相关且异常类型已提供所有必要上下文的某些边缘情况,可以在不创建新变量的情况下捕获异常。


答案 2

您可以使用 PHP 8 @see

5,7 菲律宾比索

否,但您可以取消设置它。

try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
    unset($e);
}

如果是 PHPMD 导致此问题,则可以禁止显示警告。

PHPMD 抑制警告

class Bar {
    /**
     * This will suppress UnusedLocalVariable
     * warnings in this method
     *
     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
     */
    public function foo() {

        try {
            ...
        } catch (Exception $e) {
            // Nothing, this is normal
            unset($e);
        }
    }
}

我假设你只是在捕捉例外,因为你不需要,因为你想这样做。在 PHP 5,7 中,如果要使用,则必须使用 a,如果使用 a,则必须声明变量。catchtrycatch


推荐