Для чего нужен код исключения для PHP? Любой сценарий использования?
Хорошо, это очень хромой вопрос для многих, но я надеюсь, что у меня будет подавляющий ответ:)
Когда я бросаю исключение в PHP, я могу добавить код в сообщение.
Я поймаю исключение и обрабатываю его в соответствии с его типом (например, InvalidArgumentException
или OutOfBoundException
). Я регистрирую сообщение или показываю его или делаю все, что подходит.
Я могу добавить также добавить предыдущее исключение, чтобы проследить путь к началу ошибки.
НО одно, что я никогда не использовал и не думал о: насколько полезен код?
Например:
throw new Exception("db Error", $code, $previousException);
Что мне делать с $code
?
Ответы
Ответ 1
Сообщение для отображения пользователю, в то время как код предназначен для использования вашей программой. Например, например, в примере с "ошибкой базы данных" вы можете составить набор таких кодов, как
- Невозможно подключиться
- Ошибка во время запроса
- Пустой результат
- Ошибка закрытия соединения
а затем используйте соответствующий код. Затем, когда другие части вашего кода увидели их исключение, они узнали бы, что произошло, и могли бы с этим справиться разумно.
Ответ 2
Как интерпретируется $code
, зависит от типа исключения. Например, если у вас есть подкласс Exception
, который представляет ошибку базы данных MySQL, то $code
может быть исходным кодом ошибки MySQL. В случае ошибки низкого уровня IO это может быть значение от <errno.h>
.
В принципе, $code
должен содержать все, что вам нужно, чтобы программно обрабатывать исключение. Большинство исключений предназначено для обработки где-то. Если все ваши исключения просто отображаются как ошибки, то $code
полезен, если вам нужно включить код ошибки из библиотеки, такой как клиентская библиотека MySQL.
Ответ 3
Я видел реализации (CakePHP), где $code
используется как код статуса HTTP.
Я реализовал эту концепцию с подмножеством исключений. Таким образом, все исключения, простирающиеся от HttpException
, которые вызывают ответы с ошибками HTTP
Ответ 4
В объектно-ориентированных языках тип исключения передает тип ошибки. Однако, если, например, у вас есть две вещи, которые могут генерировать один и тот же тип исключения, код ошибки может использоваться для более подробного описания.
Код ошибки является широко используемой функцией в не-объектно-ориентированном языке, чтобы сообщить, какой тип ошибки он имеет.