2015-04-13 1 views
0

OK. Я получаю предупреждение о запахе кода в моей среде IDE. Я понимаю, почему, и понимаю, что предупреждение не особенно страшно. Однако, если есть лучший способ написать этот блок, я хотел бы знать.Как исправить этот запах кода в моем блоке try/catch

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

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

} 

Я не возвращать значение вне try блока. Запах уходит, если я верну его в конце. Есть лучший способ сделать это?

+1

Как вы понимаете, почему? –

+0

какое предупреждение вы получили? –

+0

@ M.AdamKendall Я ничего не возвращаю за пределы блока 'try/catch'. Когда я поставлю туда заявление о возврате, он уходит. – nobrandheroes

ответ

1

Больший запах кода для меня заключается в том, что вы бросаете исключение, а затем сразу же его поймаете. Кажется, что вы делаете это, чтобы не возвращать ничего, что, конечно же, вы жалуетесь на вашу среду IDE. я бы переписать это так:

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

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

} 
+0

Не избегать возврата каких-либо вещей, просто желая создавать сообщения об ошибках и в определенный момент настраивать журнал. – nobrandheroes

+1

В этом случае вы можете войти в систему прямо перед возвратом null. –

1

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