Что такое исключение?
Ошибка — это неожиданный результат программы, который не может быть обработан самой программой.
Ошибки устраняются путем исправления программы. Примером ошибки может быть бесконечный цикл, который никогда не останавливается.
Исключением является неожиданный результат программы, который может обрабатываться самой программой.
Примеры исключений включают попытки открыть файл, который не существует.
Это исключение может быть обработано путем создания файла или предоставления пользователю возможности поиска файла.
В этом уроке вы узнаете
- Зачем обрабатывать исключения?
- Обработка ошибок PHP
- Примеры обработки ошибок
- Разница между ошибками и исключениями
- Несколько исключений
- Тестирование кода
Зачем обрабатывать исключения?
- Избегайте неожиданных результатов на наших страницах, которые могут очень раздражать или раздражать наших конечных пользователей
- Повышайте безопасность наших приложений, не раскрывая информацию, которую злоумышленники могут использовать для атаки на наши приложения.
- Исключения Php используются для изменения нормального потока программы в случае возникновения предсказуемой ошибки.
Обработка ошибок PHP
При возникновении ошибки, в зависимости от настроек конфигурации, PHP отображает сообщение об ошибке в веб-браузере с информацией, относящейся к возникшей ошибке.
PHP предлагает несколько способов обработки ошибок.
Мы рассмотрим три (3) часто используемых метода;
- Операторы Die — функция Die объединяет в себе функции эха и выхода. Это очень полезно, когда мы хотим вывести сообщение и остановить выполнение скрипта при возникновении ошибки.
- Пользовательские обработчики ошибок — это пользовательские функции, которые вызываются при возникновении ошибки.
- Отчет об ошибках PHP — сообщение об ошибке в зависимости от ваших настроек сообщения об ошибках PHP. Этот метод очень полезен в среде разработки, когда вы не знаете, что вызвало ошибку. Отображаемая информация может помочь вам отладить ваше приложение.
Примеры обработки ошибок
Давайте теперь рассмотрим несколько простых примеров с процедурами обработки ошибок.
Давайте предположим, что мы разработали приложение, которое использует текстовые файлы для хранения данных. Возможно, мы захотим проверить существование файла, прежде чем пытаться прочитать данные из него.
Код ниже реализует приведенный выше пример.
<?php $denominator = 0; echo 2 / $denominator; ?>
Предполагая, что вы сохранили файл simple_error.php в папке phptuts, откройте URL-адрес http: //localhost/phptuts/simple_error.php
Вы получите следующие результаты
Как видно из приведенных выше результатов, наше приложение выглядит непрофессионально и может раздражать пользователя.
Мы изменим приведенный выше код и напишем обработчик ошибок для приложения
<?php $denominator = 0; if ($denominator != 0) { echo 2 / $denominator; } else { echo "cannot divide by zero (0)"; } ?>
Предполагая, что вы сохранили приведенный выше код как error_handling.php, откройте URL-адрес http: //localhost/phptuts/error_handling.php
Примечание. Рекомендуется отображать сообщение, показанное выше, вместо сообщения «Файл не найден».
Давайте посмотрим на другой пример, который использует пользовательский обработчик ошибок.
Пользовательский обработчик ошибок будет установлен в качестве функции обработки ошибок PHP по умолчанию и будет отображать номер ошибки и сообщение.
Код ниже иллюстрирует реализацию приведенного выше примера
<?php function my_error_handler($error_no, $error_msg) { echo "Opps, something went wrong:"; echo "Error number: [$error_no]"; echo "Error Description: [$error_msg]"; } set_error_handler("my_error_handler"); echo (5 / 0); ?>
Откройте URL http: //localhost/phptuts/custom_error_handler.php, вы получите следующие результаты
Как видно из приведенного выше примера, пользовательские обработчики ошибок являются мощными в том смысле, что
- Они позволяют нам настраивать сообщения об ошибках.
- Пользовательский обработчик ошибок также может включать регистрацию ошибок в файле / базе данных, отправку электронной почты разработчику и т. Д.
Давайте теперь посмотрим на третий тип обработки ошибок. Мы будем использовать встроенную функцию PHP error_reporting. Имеет следующий основной синтаксис
<?php error_reporting($reporting_level); ?>
ВОТ,
- Error_reporting — это функция сообщения об ошибках PHP
- «$ Reports_level» является необязательным, его можно использовать для установки уровня отчетов. Если уровень отчетов не указан, PHP будет использовать уровень сообщений об ошибках по умолчанию, указанный в файле php.ini.
Уровень отчетности | Описание | пример |
---|---|---|
E_WARNING | Отображает только предупреждающие сообщения. Не останавливает выполнение скрипта | error_reporting (E_WARNING); |
E_NOTICE | Отображает уведомления, которые могут появиться во время нормального выполнения программы или могут быть ошибкой. | сообщение об ошибке (E_ NOTICE); |
E_USER_ERROR | Отображает сгенерированные пользователем ошибки, т.е. пользовательский обработчик ошибок | сообщение об ошибке (E_ USER_ERROR); |
E_USER_WARNING | Отображает созданные пользователем предупреждения | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Отображает созданные пользователем уведомления | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Отображает ошибки, которые не являются фатальными и могут быть обработаны с помощью пользовательских обработчиков ошибок | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Отображает все ошибки и предупреждения | сообщение об ошибке (E_ ALL); |
Разница между ошибками и исключениями
- Исключения генерируются и предназначены для обнаружения, в то время как ошибки, как правило, неустранимы.
-
Исключения обрабатываются объектно-ориентированным способом.
Это означает, что когда выдается исключение; создается объект исключения, содержащий подробности исключения.
В таблице ниже показаны методы объекта исключения.
метод | Описание | пример |
---|---|---|
GetMessage () | Отображает сообщение об исключении |
<?php echo $e->getMessage(); ?> |
получить код() | Отображает числовой код, представляющий исключение |
<?php echo $e->getCode(); ?> |
получить файл() | Отображает имя файла и путь, где произошло исключение |
<?php echo $e->getFile(); ?> |
GetLine () | Отображает номер строки, где произошло исключение |
<?php echo $e->getLine(); ?> |
getTrace () | Отображает массив обратной трассировки перед исключением |
<?php print_r( $e->getTrace()); ?> |
getPrevious () | Отображает предыдущее исключение перед текущим |
<?php echo $e->getPrevious(); ?> |
getTraceAsString () | Отображает обратную трассировку исключения в виде строки вместо массива |
<?php echo $e->getTraceAsString(); ?> |
__нанизывать() | Отображает все исключение в виде строки |
<?php echo $e->__toString(); ?> |
Ниже приведен базовый синтаксис для выдачи исключения.
<?php throw new Exception("This is an exception example"); ?>
ВОТ,
- «Throw» — это ключевое слово, используемое для исключения
- «New Exception (…)» создает объект исключения и передает строку «Это пример исключения» в качестве параметра сообщения.
Приведенный выше код выводит следующее сообщение.
Теперь мы рассмотрим пример, который реализует исключения throw и catch.
Мы изменим приведенный выше пример и добавим try, throw и catch.
Он имеет следующий основной синтаксис.
<?php try { //code goes here that could potentially throw an exception } catch (Exception $e) { //exception handling code goes here } ?>
ВОТ,
- «Try {…}» — это блок кода, который должен быть выполнен, и потенциально может вызвать исключение
- «Catch (Exception $ e) {…}» — это блок кода, который перехватывает выброшенное исключение и присваивает объект исключения переменной $ e.
Приведенный ниже код показывает базовый пример исключения с реализованным исключением try, throw и catch.
Программа намеренно выдает исключение, которое затем перехватывает.
<?php try { $var_msg = "This is an exception example"; throw new Exception($var_msg); } catch (Exception $e) { echo "Message: " . $e->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, используется для создания исключений.
Мы создадим два класса, которые расширяют класс исключений и используем их для создания исключений.
Код ниже показывает реализацию.
<?php class DivideByZeroException extends Exception {}; class DivideByNegativeException extends Exception {}; function process($denominator) { try { if ($denominator == 0) { throw new DivideByZeroException(); } else if ($denominator < 0) { throw new DivideByNegativeException(); } else { echo 25 / $denominator; } } catch (DivideByZeroException $ex) { echo "DIVIDE BY ZERO EXCEPTION!"; } catch (DivideByNegativeException $ex) { echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!"; } catch (Exception $x) { echo "UNKNOWN EXCEPTION!"; } } process(0); ?>
Тестирование кода
Мы предполагаем, что вы сохранили файл multip_exceptions.php в папке phptuts.
Перейдите по URL-адресу http: //localhost/phptuts/multiple_exceptions.php
Вернитесь к файлу PHP и передайте -1 в качестве параметра, как показано на следующей диаграмме.
Перейдите по URL-адресу http: //localhost/phptuts/multiple_exceptions.php .
Какие результаты вы получаете? Передайте 3 в качестве параметра.
Какие результаты вы получаете?
Резюме
- Ошибки — это неожиданные результаты, полученные в PHP-коде.
- Обработка ошибок улучшает производительность приложения
- PHP имеет встроенные функции, которые можно использовать для настройки способа, которым PHP сообщает об ошибках
- Исключения подобны ошибкам, но они могут быть перехвачены с помощью блока catch при выдаче.
- Отображение сообщений об ошибках, которые показывают информацию об ошибках, считается плохой практикой безопасности.