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

时间:2015-04-13 17:31:37

标签: php try-catch

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

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

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

}

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

2 个答案:

答案 0 :(得分:1)

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

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

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

}

答案 1 :(得分:1)

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