Учебник по PHP

PHP ГЛАВНАЯ Введение в PHP Установка PHP Синтаксис PHP Комментарии PHP PHP-переменные PHP-эхо/печать Типы данных PHP PHP-строки PHP-номера PHP-математика PHP-константы PHP-операторы PHP Если... Иначе... Иначе PHP-переключатель PHP-циклы PHP-функции PHP-массивы PHP-суперглобальные переменные PHP регулярное выражение

PHP- формы

Обработка форм PHP Проверка формы PHP Требуется PHP-форма URL-адрес формы PHP/электронная почта PHP-форма завершена

PHP продвинутый

Дата и время PHP PHP включает Обработка файлов PHP Открытие/чтение файла PHP Создание/запись файла PHP Загрузка файла PHP PHP-куки PHP-сессии PHP-фильтры Расширенные фильтры PHP Функции обратного вызова PHP PHP JSON Исключения PHP

PHP ООП

PHP Что такое ООП PHP-классы/объекты PHP-конструктор PHP-деструктор Модификаторы доступа PHP Наследование PHP PHP-константы Абстрактные классы PHP PHP-интерфейсы Особенности PHP Статические методы PHP Статические свойства PHP Пространства имен PHP Итерации PHP

База данных MySQL

База данных MySQL Подключиться к MySQL MySQL Создать БД MySQL Создать таблицу Вставка данных MySQL MySQL Получить последний идентификатор MySQL Вставить несколько MySQL подготовлен Выбор данных MySQL MySQL Где Порядок MySQL MySQL Удалить данные Данные обновления MySQL Предельные данные MySQL

PHP XML

XML-парсеры PHP Парсер PHP SimpleXML PHP SimpleXML — Получить PHP XML Expat PHP XML DOM

PHP — АЯКС

Введение в АЯКС АЯКС PHP База данных AJAX АЯКС XML AJAX-поиск в реальном времени АЯКС-опрос

Примеры PHP

Примеры PHP PHP-компилятор PHP-викторина PHP-упражнения PHP-сертификат

Справочник по PHP

Обзор PHP PHP-массив Календарь PHP Дата PHP PHP-каталог Ошибка PHP PHP-исключение Файловая система PHP PHP-фильтр PHP FTP PHP JSON Ключевые слова PHP PHP-библиотека XML PHP-почта PHP-математика PHP Разное PHP MySQLi PHP-сеть Управление выводом PHP PHP регулярное выражение PHP SimpleXML PHP-поток PHP-строка Обработка переменных PHP XML-парсер PHP PHP-архив Часовые пояса PHP

Исключения PHP


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

Исключение — это объект, описывающий ошибку или неожиданное поведение PHP-скрипта.

Исключения генерируются многими функциями и классами PHP.

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

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


Создание исключения

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

Если исключение не перехвачено, произойдет фатальная ошибка с сообщением «Неперехваченное исключение».

Давайте попробуем сгенерировать исключение, не перехватывая его:

Пример

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

echo divide(5, 0);
?>

Результат будет выглядеть примерно так:

Fatal error: Uncaught Exception: Division by zero in C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4

Оператор try...catch

Чтобы избежать ошибки из приведенного выше примера, мы можем использовать try...catchоператор для перехвата исключений и продолжения процесса.

Синтаксис

try {
  code that can throw exceptions
} catch(Exception $e) {
  code that runs when an exception is caught
}

Пример

Показывать сообщение при возникновении исключения:

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide.";
}
?>

Блок catch указывает, какой тип исключения следует перехватывать, и имя переменной, которая может использоваться для доступа к исключению. В приведенном выше примере тип исключения Exceptionи имя переменной $e.


Попробуй... поймай... наконец Заявление

Оператор try...catch...finallyможет использоваться для перехвата исключений. Код в finallyблоке всегда будет выполняться независимо от того, было ли перехвачено исключение. Если finallyприсутствует, catchблок является необязательным.

Синтаксис

try {
  code that can throw exceptions
} catch(Exception $e) {
  code that runs when an exception is caught
} finally {
  code that always runs regardless of whether an exception was caught
}

Пример

Показывать сообщение при возникновении исключения, а затем указывать, что процесс завершен:

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide. ";
} finally {
  echo "Process complete.";
}
?>

Пример

Вывести строку, даже если исключение не было перехвачено:

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} finally {
  echo "Process complete.";
}
?>

Объект исключения

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

Синтаксис

new Exception(message, code, previous)

Значения параметров

Parameter Description
message Optional. A string describing why the exception was thrown
code Optional. An integer that can be used used to easily distinguish this exception from others of the same type
previous Optional. If this exception was thrown in a catch block of another exception, it is recommended to pass that exception into this parameter

Методы

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

Method Description
getMessage() Returns a string describing why the exception was thrown
getPrevious() If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null
getCode() Returns the exception code
getFile() Returns the full path of the file in which the exception was thrown
getLine() Returns the line number of the line of code which threw the exception

Пример

Вывести информацию о выброшенном исключении:

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero", 1);
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $ex) {
  $code = $ex->getCode();
  $message = $ex->getMessage();
  $file = $ex->getFile();
  $line = $ex->getLine();
  echo "Exception thrown in $file on line $line: [Code $code]
  $message";
}
?>

Полный справочник исключений

Полную справку см. в нашем Полном справочнике по исключениям PHP .

Справочник содержит описания и примеры всех методов Exception.