Я считаю, что в правильно закодированных системах ошибки (как ошибки или исключения) не должны быть возможными (за исключением того, что сервер БД / memcached выходит из строя, вызывая сбой запроса). Наш код не должен опираться на какие-либо предположения для правильной работы и должен быть как можно более пуленепробиваемым.
Однако, чтобы наши системы справлялись с проблемами наиболее удобным для пользователя способом, мы должны создать и внедрить какую-то «ловящую систему», чтобы гарантировать, что, если что-нибудь пойдет не так, как для нашего сервера, так и для персонала. о конечном пользователе позаботятся.
С этой целью PHP предлагает два решения - ошибки и исключения. Ошибки состоят из 5 значений, а исключения состоят из 5 значений, заключенных в объект. Оба позволяют возвращать данные, которые неоценимы во время сборки приложения.
5 значений: $ error_code,
$ error_message, $ file, $ line, $ context
Обычно, в нашем стремлении к правильному программированию ООП, выбор по умолчанию всегда состоит в том, чтобы преследовать объекты - но в таком случае я не уверен, насколько они полезны на самом деле. При использовании исключений дополнительная память тратится впустую из-за необходимости переноса значений в объект (для этого часто требуются дополнительные файлы, содержащие классы исключений). Более того, вы должны заключить любой код, который, по вашему мнению, может не работать, в блок TRY / CATCH {}. Это оставляет метод обработки ошибок открытым для человеческой ошибки, поскольку точки отказа могут не покрываться разработчиком. Чтобы обезопасить себя от этого, вы можете использовать set_exception_handler, которому будут переданы любые исключения, которые не были перехвачены. Плохая вещь в обработчике исключений состоит в том, что выполнение будет остановлено после вызова обработчика exception_handler - поэтому не существует такого понятия, как восстанавливаемое / игнорируемое исключение, если оно не будет перехвачено в блоке try / catch.
С другой стороны, ошибки всегда глобальны и могут быть обработаны любой функцией / классом, установленным set_error_handler. Это устраняет необходимость в дополнительных классах исключений, объектной памяти или строках кода try / catch. Как и исключения, ошибки также поставляются со встроенными кодами ошибок, которые (в отличие от исключений) можно использовать для продолжения выполнения сценария для незначительных или неважных проблем сценария. Кроме того, большинство функций PHP вызывает ошибки, поэтому вы не будете идти против течения языка.
Итак, учитывая, что вы все равно должны поддерживать обработку ошибок (делать с языком PHP), какова цель напрасной траты дополнительного кода и памяти, а также реализации исключений? Мы просто слепо делаем это, потому что это ошибка в форме объекта или в дизайне приложения есть реальная выгода, что обычные ошибки нам не позволяют?