首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种不需要创建变量就能捕获异常的方法?

有没有一种不需要创建变量就能捕获异常的方法?
EN

Stack Overflow用户
提问于 2011-01-28 02:18:35
回答 8查看 25.7K关注 0票数 45

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

代码语言:javascript
运行
复制
try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
}

有了这样的代码,我最终得到的是一个无用的变量$e (大量资源),而PHP_MD (PHP脏乱检测器)会因为一个未使用的变量而创建一个警告。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2020-05-15 00:16:25

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

This is the relevant RFC,以48比1的赞成票。

现在可以这样做了:

代码语言:javascript
运行
复制
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");
}

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

票数 18
EN

Stack Overflow用户

发布于 2015-02-06 20:25:35

You can with PHP 8 @see

PHP 5,7

不能,但你可以取消设置。

代码语言:javascript
运行
复制
try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
    unset($e);
}

如果是PHPMD导致了这个问题,那么您可以禁止显示该警告。

PHPMD suppress-warnings

代码语言:javascript
运行
复制
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);
        }
    }
}

我假设你只是捕获异常,因为你不需要这样做,因为你想这样做。在PHP5,7中,如果你想使用try,你必须使用catch,如果你使用catch,你必须声明一个变量。

票数 15
EN

Stack Overflow用户

发布于 2011-01-28 02:21:57

这就是异常的全部意义--你可以有多个不同的catch块来捕捉你想要处理的任何异常。异常的数据必须被赋值到某个地方,因此变量。如果你真的不想看到这些警告,你可以在catch代码块中执行类似unset($e)的操作……或者禁用警告(通常不是一个好主意)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4820211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档