好。我的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的这些问题,所以你能够做到这一点,但它肯定是有臭味的。优良的做法是让你的功能在一致的庄园中表现,即不管发生了什么,总是返回一些东西。我会在你的try / catch之后返回null,并且总是检查从这个函数返回的值,无论它在哪里使用。