我应该如何修复我的 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。
好的。我在 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。