我应该如何在try / catch块中修复此代码气味

问题描述 投票:0回答:2

好。我的IDE中出现了代码异味警告。我明白为什么,并明白警告并不是特别可怕。但是,如果有更好的方法来编写这个块,我想知道。

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

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

}

我没有返回try块之外的值。如果我最后回来,气味就会消失。有一个更好的方法吗?

php try-catch
2个回答
1
投票

对我来说更大的代码味道是你抛出一个异常然后立即抓住它。您似乎正在这样做以避免返回任何内容,当然,您的IDE正在抱怨。我会把它重写为:

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

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

}

1
投票

您的函数是一个工厂,应该隐式返回它创建的内容。在像Java这样的静态类型语言中,你必须声明一个返回类型,并且必须返回一些东西。用静态类型语言编写的函数无法编译。我们没有PHP的这些问题,所以你能够做到这一点,但它肯定是有臭味的。优良的做法是让你的功能在一致的庄园中表现,即不管发生了什么,总是返回一些东西。我会在你的try / catch之后返回null,并且总是检查从这个函数返回的值,无论它在哪里使用。

© www.soinside.com 2019 - 2024. All rights reserved.