Я использую PHP с каркасом CodeIgniter. Я прочитал несколько статей, в которых использование методов try / catch в плохой практике.
Я понимаю, что нужно использовать ведение журнала в процессе разработки, когда может возникнуть потенциальная ошибка, и пусть фактическая ошибка произойдет, а затем log_message('level', 'message')
ее с помощью log_message('level', 'message')
Но при развертывании вы хотите подавлять и обрабатывать любые возникающие ошибки. Должен ли я использовать блоки try / catch, например, что-то вроде …
try { $this->data['important'] = $this->Test_Model->do_something($data); if(empty(data['important'])) { throw new Exception('no data returned'); } catch (Exception $e) { //alert the user then kill the process var_dump($e->getMessage()); }
Я смущен, когда использую правильно использовать try / catch.
В коде есть синтаксическая ошибка, это должно быть:
try { $this->data['important'] = $this->Test_Model->do_something($data); if(empty($this->data['important'])) { throw new Exception('no data returned'); } } catch (Exception $e) { //alert the user. var_dump($e->getMessage()); }
Использование try/catch
не является плохой практикой.
Исключения могут быть недоступны без необходимости переопределять обработчик ошибок PHP по умолчанию. Это означает, что вы можете что-то сделать, когда исключения происходят во время выполнения.
Журналы для вас. Если ваше приложение не является здоровым, и вы зарегистрировали возможные проблемные точки, вы можете легче идентифицировать ошибки. Основное различие между вашим журналом и собственным журналом – это контекст, собственный журнал не имеет контекста, у него есть только встречаемость и, возможно, трассировка стека.
Исключения должны быть обнаружены только в двух случаях:
Если вы хотите выполнить дополнительную обработку ошибок и закрыть их, и / или журнал / отображение информации об ошибках. Необязательно, исключение может быть повторно выбрано исключение для «пузыря вверх» в стеке, чтобы другие подпрограммы могли сделать то же самое. например:
try { //code } catch( Exception $e ) { echo "friendly error message"; logging_function($e->getMessage()); throw $e; }
Наиболее распространенным методом является простое использование блока try / catch для молча игнорирования исключений и продолжения выполнения, как если бы все было в порядке. Выполнение чего-то подобного вернется и укусит вас в задницу, когда что-то пойдет не так много позже в исполнении вашей программы, о том, что проигнорированное исключение предупредило бы вас о том, что вы потом тратите на часы своей жизни:
try { // code } catch( Exception $e ) { /* L7: Exception handling is for squares! */ }
В этих случаях гораздо лучше позволить исключению вызывать ошибку, где это произошло, вместо того, чтобы игнорировать эту ошибку, вызвало худшее.