ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

PHP Учебник

PHP СТАРТ PHP Интро PHP Установка PHP Синтаксис PHP Комментарии PHP Переменные PHP Echo / Print PHP Типы данных PHP Строки PHP Числа PHP Математика PHP Константы PHP Операторы PHP If...Else...Elseif PHP Switch PHP Циклы PHP Функции PHP Массивы PHP Суперглобальные PHP RegEx

PHP Формы

PHP Обработка формы PHP Проверка формы PHP Обязательные поля формы PHP Форма URL/E-mail PHP Заполнение формы

PHP Расширенный

PHP Дата и время PHP Подключение файлов PHP Обработка файлов PHP Файл открыть/читать PHP Файл создать/записать PHP Файл Загрузить PHP Куки PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Callback функции 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 Получить последний ID MySQL Вставить несколько записей MySQL Подготовленные инструкции MySQL Выбрать данные MySQL Where MySQL Order By MySQL Удаление данных MySQL Обновление данных MySQL Ограничение данных

PHP XML

PHP XML Парсеры PHP SimpleXML Парсер PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Интро AJAX PHP AJAX База данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры PHP Компилятор PHP Викторина PHP Упражнения PHP Сертификат

PHP Справочник

PHP Обзор PHP Массив PHP Календарь PHP Дата PHP Каталог PHP Ошибка PHP Исключение PHP Файловая система PHP Фильтр PHP FTP PHP JSON PHP Ключевые слова PHP Libxml PHP Почта PHP Математика PHP Разное PHP MySQLi PHP Сеть PHP Output Control PHP RegEx PHP SimpleXML PHP Поток PHP Строка PHP Обработка переменных PHP XML Парсер PHP Zip PHP Часовые пояса

PHP. Уроки для начинающих

PHP Исключения


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

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

Многие функции и классы PHP создают исключения.

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

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


Выброс исключения

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

Если исключение не обнаружено, произойдет фатальная ошибка с сообщением о "Неперехваченном исключении" ("Uncaught Exception").

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

Пример

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Деление на ноль");
  }
  return $dividend / $divisor;
}

echo divide(5, 0);
?>
Попробуйте сами »

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

Fatal error: Uncaught Exception: Деление на ноль в C:\webfolder\test.html:4
Stack trace: #0 C:\webfolder\test.html(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.html on line 4

Инструкция try...catch

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

Синтаксис

try {
  код, который может генерировать исключения
} catch(Exception $e) {
  код, который запускается при обнаружении исключения
}

Пример

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

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Деление на ноль");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide.";
}
?>
Попробуйте сами »

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


Инструкция try...catch...finally

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

Синтаксис

try {
  код, который может генерировать исключения
} catch(Exception $e) {
  код, который запускается при обнаружении исключения
} finally {
  код, который всегда выполняется независимо от того, было ли обнаружено исключение
}

Пример

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

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Деление на ноль");
  }
  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("Деление на ноль");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} finally {
  echo "Процесс завершен.";
}
?>
Попробуйте сами »

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

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

Синтаксис

new Exception(message, code, previous)

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

Параметр Описание
message Необязательный. Строка, описывающая, почему было сгенерировано исключение
code Необязательный. Целое число, которое можно использовать, чтобы легко отличить это исключение от других того же типа
previous Необязательный. Если это исключение было сгенерировано в блоке catch другого исключения, рекомендуется передать это исключение в этот параметр

Методы

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

Метод Описание
getMessage() Возвращает строку, описывающую, почему было сгенерировано исключение
getPrevious() Если это исключение было инициировано другим, этот метод возвращает предыдущее исключение. Если нет, то возвращается null
getCode() Возвращает код исключения
getFile() Возвращает полный путь к файлу, в котором возникло исключение
getLine() Возвращает номер строки кода, вызвавшего исключение

Пример

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

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Деление на ноль", 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 исключений на нашем сайте W3Schools на русском.

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