Как мне исправить этот запах кода в моем блоке 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 блок. Запах исчезнет, ​​если я верну один в конце. Есть лучший способ сделать это?

0

Решение

Чем больше пахнет код для меня, так это тем, что вы бросаете исключение, а затем немедленно его ловите. Похоже, вы делаете это, чтобы избежать возврата чего-либо, на что, конечно, жалуется ваша IDE.
Я бы переписал это как:

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

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

}
1

Другие решения

Ваша функция является фабрикой и должна неявно возвращать то, что она создала. В статически типизированных языках, таких как Java, вы должны объявлять тип возвращаемого значения и должны возвращать что-либо независимо. Ваша функция, написанная на статически типизированном языке, не будет компилироваться. У нас нет этих проблем с PHP, поэтому вы можете это сделать, но это вонючий наверняка. Это хорошая практика, чтобы ваша функция работала в согласованном стиле, то есть всегда возвращала что-то независимо от того, что произошло. Я бы возвратил null после вашего try / catch и всегда проверял значение, возвращаемое этой функцией, где бы она ни использовалась.

1