繁体   English   中英

我应该如何在try / catch块中解决此代码异味

[英]How should I fix this code smell in my try/catch block

好。 我在IDE中收到代码气味警告。 我理解原因,并了解警告并不是特别严重。 但是,如果有更好的方法来编写此块,我想知道。

public function factory($state_name = 'Generic')
{
    ...

    try {
        if (!$class_exists) {
            throw new CustomException;
        } else {
            return new $class_name;
        }
    }
    catch (CustomException $c) {
        echo ...
    }

}

我不会在try块之外返回任何值。 如果我最后还给我一个,气味就会消失。 有一个更好的方法吗?

对我来说,更大的代码气味是您引发异常,然后立即捕获它。 看来您这样做是为了避免返回任何东西,这当然是您的IDE抱怨的。 我将其重写为:

public function factory($state_name = 'Generic')
{
    ...

    if ($class_exists) {
        return new $class_name;
    }
    return null;

}

您的函数是一个工厂,应隐式返回它创建的内容。 在诸如Java之类的静态类型语言中,您必须声明一个返回类型,并且无论如何都要返回一些内容。 用静态类型语言编写的函数将无法编译。 我们在PHP中没有这些问题,因此您可以做到这一点,但是肯定可以闻到。 最好的做法是让函数以一致的方式运行,即无论发生什么都始终返回某些内容。 在您尝试/捕获之后,我将返回null,并始终检查从该函数返回的值,无论它在哪里使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM