我应该如何修复我的 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 ...
    }

}

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

对我来说更大的代码味道是你抛出一个异常然后立即捕获它。您这样做似乎是为了避免返回任何东西,这当然是您的 IDE 抱怨的。 我会将其重写为:

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

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

}

你的函数是一个工厂,应该隐含地 return 它创建的东西。在诸如 Java 之类的静态类型语言中,您必须声明一个 return 类型,并且无论如何都必须 return 一些东西。您用静态类型语言编写的函数无法编译。 PHP 没有这些问题,所以你可以这样做,但它确实很臭。让您的函数以一致的方式运行是一种很好的做法,即无论发生什么,总是 returning 某些东西。在你的 try/catch 之后我会 return null 并且总是检查从这个函数中使用的值 returned。