Учебники

13) Обработка ошибок и исключение

Что такое исключение?

Ошибка — это неожиданный результат программы, который не может быть обработан самой программой.

Ошибки устраняются путем исправления программы. Примером ошибки может быть бесконечный цикл, который никогда не останавливается.

Исключением является неожиданный результат программы, который может обрабатываться самой программой.

Примеры исключений включают попытки открыть файл, который не существует.

Это исключение может быть обработано путем создания файла или предоставления пользователю возможности поиска файла.

В этом уроке вы узнаете

Зачем обрабатывать исключения?

  • Избегайте неожиданных результатов на наших страницах, которые могут очень раздражать или раздражать наших конечных пользователей
  • Повышайте безопасность наших приложений, не раскрывая информацию, которую злоумышленники могут использовать для атаки на наши приложения.
  • Исключения Php используются для изменения нормального потока программы в случае возникновения предсказуемой ошибки.

Обработка ошибок PHP

При возникновении ошибки, в зависимости от настроек конфигурации, PHP отображает сообщение об ошибке в веб-браузере с информацией, относящейся к возникшей ошибке.

  PHP предлагает несколько способов обработки ошибок.

Мы рассмотрим три (3) часто используемых метода;

  1. Операторы Die — функция Die объединяет в себе функции эха и выхода. Это очень полезно, когда мы хотим вывести сообщение и остановить выполнение скрипта при возникновении ошибки.
  2. Пользовательские обработчики ошибок — это пользовательские функции, которые вызываются при возникновении ошибки.
  3. Отчет об ошибках PHP — сообщение об ошибке в зависимости от ваших настроек сообщения об ошибках PHP. Этот метод очень полезен в среде разработки, когда вы не знаете, что вызвало ошибку. Отображаемая информация может помочь вам отладить ваше приложение.

Примеры обработки ошибок

Давайте теперь рассмотрим несколько простых примеров с процедурами обработки ошибок.

Давайте предположим, что мы разработали приложение, которое использует текстовые файлы для хранения данных. Возможно, мы захотим проверить существование файла, прежде чем пытаться прочитать данные из него.

Код ниже реализует приведенный выше пример.

<?php
$denominator = 0;
echo 2 / $denominator;
?>

Предполагая, что вы сохранили файл simple_error.php в папке phptuts, откройте URL-адрес http: //localhost/phptuts/simple_error.php

Вы получите следующие результаты

PHP Exception Handle в 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 Exception Handle в 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 Exception Handle в 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 (…)» создает объект исключения и передает строку «Это пример исключения» в качестве параметра сообщения.

Приведенный выше код выводит следующее сообщение.

PHP Exception Handle в PHP

Теперь мы рассмотрим пример, который реализует исключения 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 Exception Handle в PHP

Также возможно создать несколько исключений для одного оператора php try, в зависимости от типа создаваемого исключения.

См. Статью о MySQL, доступ к данным PHP … примеры реализации нескольких исключений

Несколько исключений

Многократное исключение использует несколько блоков try catch для обработки сгенерированных исключений. Несколько исключений полезны, когда;

  • Вы хотите отобразить настроенное сообщение в зависимости от выданного исключения
  • Вы хотите выполнить уникальную операцию в зависимости от сгенерированного исключения

Блок-схема ниже иллюстрирует работу нескольких исключений

PHP Exception Handle в PHP

Давайте посмотрим на пример, который использует несколько исключений.

Мы изменим код, который делит число на переданный знаменатель.

Мы ожидаем двух типов исключений;

  • Деление на ноль
  • Деление на отрицательное число

Для простоты мы будем отображать только тип исключения в наших блоках 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 Exception Handle в PHP

Вернитесь к файлу PHP и передайте -1 в качестве параметра, как показано на следующей диаграмме.

PHP Exception Handle в PHP

Перейдите по URL-адресу http: //localhost/phptuts/multiple_exceptions.php .

 Какие результаты вы получаете? Передайте 3 в качестве параметра.

Какие результаты вы получаете?

Резюме

  • Ошибки — это неожиданные результаты, полученные в PHP-коде.
  • Обработка ошибок улучшает производительность приложения
  • PHP имеет встроенные функции, которые можно использовать для настройки способа, которым PHP сообщает об ошибках
  • Исключения подобны ошибкам, но они могут быть перехвачены с помощью блока catch при выдаче.
  • Отображение сообщений об ошибках, которые показывают информацию об ошибках, считается плохой практикой безопасности.