Я работаю над фреймворком PHP и в настоящее время занимаюсь обработкой ошибок. Основываясь на том, что я прочитал на SO, я должен использовать исключения только для исключительных ситуаций. Поэтому неправильное использование исключения при неправильном вводе пароля.
Должен ли я избегать использования исключений, когда я хочу вернуть код ошибки сервера пользователю (например, 404 Страница не найдена)? Если да, должен ли я написать свой собственный класс обработки ошибок?
Ваш код не должен генерировать исключение для взаимодействия с пользователем, он должен исключить исключение, чтобы уведомить более высокий уровень кода о том, что произошло что-то невосстановимое.
Теперь, в зависимости от того, что произошло, вы можете отвечать определенным кодом статуса HTTP. Но в этот момент вы не выбрасываете исключения для запуска ошибки сервера, вы получаете исключения и предоставляете пользователю соответствующий ответ.
Если вопросы – это то, что должно произойти, когда запрашивается статья / блог / элемент / etc, которая не существует – хорошо, если код, ответственный за отображение информации, просто устанавливает код ответа, тогда, во что бы то ни стало, не используйте исключения.
Если вы используете среду MVC, и ваши индивидуальные контроллеры могут установить код ответа, то пусть они.
И если самый верхний обработчик исключений может использовать код ответа HTTP, чтобы лучше представить сообщение об ошибке пользователю, тогда позвольте ему.
Исключения не являются механизмами управления потоком.
Исключения должны быть ограничены ТОЛЬКО теми моментами, когда приложение действительно не может справиться с ситуацией.
Как вы сказали, выброс исключения из-за неправильного пароля очень неправильный.
Единственные ситуации типа ошибки сервера, которые я могу придумать, – это отсутствие необходимого ресурса (например, вашего SQL-сервера).
Помимо этого, доступ запрещен и т. Д. – все это обычные случаи, в которых ваше приложение должно иметь нормальный способ обработки.
Я думаю, вы говорите о двух разных вещах:
В первой ситуации исключение бросания – это правильный способ сделать, если вы хотите решить проблему, используя ориентированный на объект подход. Коды состояния HTTP являются частью протокола HTTP, и ваша структура не должна обрабатывать их каким-либо образом.