Что такое исключение?
Ошибка - это неожиданный результат программы, который не может быть обработан самой программой.
Ошибки устраняются исправлением программы. Примером ошибки может служить бесконечный цикл, выполнение которого никогда не прекращается.
Исключением является непредвиденный результат программы, который может быть обработан самой программой.
Примеры исключения включают попытку открыть несуществующий файл.
Это исключение можно обработать, создав файл или предоставив пользователю возможность поиска файла.
В этом руководстве вы узнаете:
- Зачем обрабатывать исключение?
- Обработка ошибок PHP
- Примеры обработки ошибок
- Разница между ошибками и исключениями
- Множественные исключения
- Тестирование кода
Зачем обрабатывать исключение?
- Избегайте неожиданных результатов на наших страницах, которые могут сильно раздражать или раздражать наших конечных пользователей.
- Повысьте безопасность наших приложений, не раскрывая информацию, которую злоумышленники могут использовать для атак на наши приложения.
- Исключения Php используются для изменения нормального выполнения программы в случае возникновения какой-либо предсказуемой ошибки.
Обработка ошибок PHP
При возникновении ошибки, в зависимости от настроек вашей конфигурации, PHP отображает сообщение об ошибке в веб-браузере с информацией, относящейся к возникшей ошибке.
PHP предлагает несколько способов обработки ошибок.
Мы собираемся рассмотреть три (3) наиболее часто используемых метода;
- Операторы Die - функция die объединяет в себе функцию echo и exit. Это очень полезно, когда мы хотим вывести сообщение и остановить выполнение скрипта при возникновении ошибки.
- Пользовательские обработчики ошибок - это определяемые пользователем функции, которые вызываются при возникновении ошибки.
- Отчет об ошибках PHP - сообщение об ошибке в зависимости от ваших настроек отчетов об ошибках PHP. Этот метод очень полезен в среде разработки, когда вы не знаете, что вызвало ошибку. Отображаемая информация может помочь вам отладить ваше приложение.
Примеры обработки ошибок
Давайте теперь рассмотрим несколько простых примеров с процедурами обработки ошибок.
Предположим, что мы разработали приложение, которое использует текстовые файлы для хранения данных. Возможно, мы захотим проверить существование файла, прежде чем пытаться прочитать из него данные.
Приведенный ниже код реализует приведенный выше пример.
Предполагая, что вы сохранили файл simple_error.php в папке phptuts, откройте URL-адрес http: //localhost/phptuts/simple_error.php
Вы получите следующие результаты
Как видно из приведенных выше результатов, это делает наше приложение непрофессиональным и может раздражать пользователя.
Мы изменим приведенный выше код и напишем обработчик ошибок для приложения.
Предполагая, что вы сохранили приведенный выше код как error_handling.php, откройте URL-адрес http: //localhost/phptuts/error_handling.php.
Примечание. Для обеспечения безопасности рекомендуется отображать сообщение, подобное показанному выше, вместо сообщения типа «Файл не найден».
Давайте посмотрим на другой пример, в котором используется настраиваемый обработчик ошибок.
Пользовательский обработчик ошибок будет установлен как функция обработки ошибок PHP по умолчанию и будет в основном отображать номер ошибки и сообщение.
Приведенный ниже код иллюстрирует реализацию приведенного выше примера.
Откройте URL-адрес http: //localhost/phptuts/custom_error_handler.php, вы получите следующие результаты
.
Как видно из приведенного выше примера, специальные обработчики ошибок мощны в том смысле, что
- Они позволяют нам настраивать сообщения об ошибках.
- Пользовательский обработчик ошибок также может включать регистрацию ошибок в файле / базе данных, отправку электронной почты разработчику и т. Д.
Давайте теперь посмотрим на третий тип обработки ошибок. Мы будем использовать встроенную функцию PHP error_reporting. Он имеет следующий базовый синтаксис
ЗДЕСЬ,
- Error_reporting - функция отчета об ошибках PHP.
- «$ Reporting_level» является необязательным, может использоваться для установки уровня отчетности. Если уровень отчетности не указан, PHP будет использовать уровень отчетов об ошибках по умолчанию, как указано в файле php.ini.
Уровень отчетности | Описание | Пример |
---|---|---|
E_WARNING | Отображает только предупреждающие сообщения. Не останавливает выполнение скрипта | error_reporting (E_WARNING); |
E_NOTICE | Отображает уведомления, которые могут появиться во время нормального выполнения программы или могут быть ошибкой. | error_reporting (E_ УВЕДОМЛЕНИЕ); |
E_USER_ERROR | Отображает сгенерированные пользователем ошибки, то есть настраиваемый обработчик ошибок | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Отображает предупреждающие сообщения, созданные пользователем | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Отображает уведомления, созданные пользователями | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Отображает ошибку, которая не является фатальной и может быть обработана с помощью пользовательских обработчиков ошибок. | сообщение об ошибке (E_RECOVERABLE_ERROR); |
E_ALL | Отображает все ошибки и предупреждения | error_reporting (E_ ALL); |
Разница между ошибками и исключениями
- Выбрасываются исключения, которые предназначены для перехвата, в то время как ошибки, как правило, неисправимы.
-
Исключения обрабатываются объектно-ориентированным способом.
Это означает, что когда выбрасывается исключение; создается объект исключения, содержащий подробные сведения об исключении.
В таблице ниже показаны методы объекта исключения.
Методика | Описание | Пример |
---|---|---|
getMessage () | Отображает сообщение об исключении |
getMessage();?> |
получить код() | Отображает числовой код, представляющий исключение |
getCode();?> |
получить файл() | Отображает имя файла и путь, по которому произошло исключение |
getFile();?> |
getLine () | Отображает номер строки, в которой произошло исключение |
getLine();?> |
getTrace () | Отображает массив трассировки до исключения |
getTrace());?> |
getPrevious () | Отображает предыдущее исключение перед текущим |
getPrevious();?> |
getTraceAsString () | Отображает трассировку исключения в виде строки вместо массива |
getTraceAsString();?> |
__нанизывать() | Отображает исключение целиком в виде строки |
__toString();?> |
Ниже приведен базовый синтаксис для создания исключения.
ЗДЕСЬ,
- «Throw» - это ключевое слово, используемое для создания исключения.
- «New Exception (…)» создает объект исключения и передает строку «Это пример исключения» в качестве параметра сообщения.
Приведенный выше код выводит следующее сообщение.
Теперь мы рассмотрим пример, который реализует исключения throw и catch.
Мы изменим приведенный выше пример и включим попытки, бросить и поймать.
Он имеет следующий базовый синтаксис.
ЗДЕСЬ,
- «Try {…}» - это блок кода, который должен быть выполнен, который потенциально может вызвать исключение.
- «Catch (Exception $ e) {…}» - это блок кода, который перехватывает возникшее исключение и присваивает объект исключения переменной $ e.
В приведенном ниже коде показан базовый пример исключения с реализованными исключениями try, throw и catch.
Программа намеренно генерирует исключение, которое затем перехватывает.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Откройте URL-адрес http: //localhost/phptuts/exception_handling.php. Вы получите следующие результаты.
Также возможно создать несколько исключений для одного оператора php try в зависимости от типа сгенерированного исключения.
См. Статью о MySQL, доступ к данным PHP.
… Для примеров реализации множественных исключенийМножественные исключения
Множественные исключения используют несколько блоков try catch для обработки выданных исключений. Множественные исключения полезны, когда;
- Вы хотите отображать настраиваемое сообщение в зависимости от сгенерированного исключения
- Вы хотите выполнить уникальную операцию в зависимости от сгенерированного исключения
На блок-схеме ниже показано, как работают несколько исключений.
Давайте посмотрим на пример, в котором используется несколько исключений.
Мы изменим код, который делит число на переданный знаменатель.
Мы ожидаем возникновения двух типов исключений;
- Деление на ноль
- Деление на отрицательное число
Для простоты мы будем отображать только тип исключения в наших блоках catch.
Встроенный в PHP класс Exception используется для создания исключений.
Мы создадим два класса, которые расширят класс исключения и будут использовать их для генерации исключений.
В приведенном ниже коде показана реализация.
Тестирование кода
Предположим, вы сохранили файл multiple_exceptions.php в папке phptuts.
Перейдите по URL-адресу http: //localhost/phptuts/multiple_exceptions.php
Вернитесь к файлу PHP и передайте -1 в качестве параметра, как показано на следующей диаграмме.
Перейдите по URL-адресу http: //localhost/phptuts/multiple_exceptions.php .
Какие результаты вы получите? Передайте 3 в качестве параметра.
Какие результаты вы получите?
Резюме
- Ошибки - это неожиданные результаты, создаваемые кодом PHP.
- Обработка ошибок улучшает производительность приложения
- PHP имеет встроенные функции, которые можно использовать для настройки того, как PHP сообщает об ошибках.
- Исключения похожи на ошибки, но их можно перехватить с помощью блока catch при выбросе.
- Отображение сообщений об ошибках, которые показывают информацию об ошибках, считается плохой практикой безопасности.