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