<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Создание исключений в PHP

Создание исключений в PHP

В предыдущей статье мы разобрали механизм исключений в PHP. Там мы использовали уже встроенный класс Exception. Однако, мы можем создавать и свои исключения. Как это делается, Вы узнаете из этой статьи.

Создание своих исключений в PHP нужно, когда требуется обработка только определённого типа ошибок. Какие могут быть типы? Можно, например, сделать исключения для работы с базой данных или исключения для проверки правильности введённых пользователем данных, или исключения для работы с файлами. Это всё отдельные типы исключений, которые мешать в 1 класс Exception будет, мягко говоря, странно. Более того, можно не просто создать 1 класс для 1-го типа ошибок, но и вообще для каждой ошибки создать отдельный класс.

Чтобы создать исключение в PHP, нужно объявить новый класс, наследуемый от класса Exception:

<?php
/* Наш класс исключений для ошибок в работе с файлами */
class FileException extends Exception {
  public function __construct($code) {
    parent::__construct("", $code);
  }
}
try {
  $file = "file.txt";
  if (!file_exists($file)) throw new FileException(1); // Если файла не существует, то выбрасываем исключение с кодом 1
  if (!is_writable($file)) throw new FileException(2); // Если файл закрыт для записи, то выбрасываем исключение с кодом 2
  $handler = fopen($file, "w"); // Открываем файл для записи
  if (!$handler) throw new FileException(3); // Если файл не получилось открыть, то выбрасываем исключение с кодом 3
  fclose($handler);
} catch (FileException $e) {
  /* Обработка кода исключения и вывод соответствующих уведомлений */
  if ($e->getCode() == 1) echo "Файл не найден";
  elseif ($e->getCode() == 2) echo "Файл закрыт для записи";
  elseif ($e->getCode() == 3) echo "Ошибка при открытии файла";
}
?>

Обратите внимание, что в catch() мы уже ждём не просто Exception, а именно FileException. Таким образом, если будет throw new Exception(), то в этот блок мы просто не попадём, так как он ждёт исключительно FileException и его дочерние классы. С другой стороны, если мы напишем в catch просто Exception, то такой catch будет перехватывать Exception и все его дочерние классы, в том числе, и FileException. Но это уже относится больше к полиморфизму, нежели к обработке исключений.

И, наконец, давайте разберём с Вами вариант, где за каждую ошибку отвечает отдельный класс:

<?php
class FileNotExistsException extends Exception {
  public function __construct() {
    parent::__construct("Файл не найден");
  }
}
class FileNotWriteException extends Exception {
  public function __construct() {
    parent::__construct("Файл закрыт для записи");
  }
}
class FileNotOpenException extends Exception {
  public function __construct() {
    parent::__construct("Ошибка при открытии файла");
  }
}
try {
  $file = "file.txt";
  if (!file_exists($file)) throw new FileNotExistsException();
  if (!is_writable($file)) throw new FileNotWriteException();
  $handler = fopen($file, "w");
  if (!$handler) throw new FileNotOpenException();
  fclose($handler);
} catch (Exception $e) {
  echo $e->getMessage();
}
?>

Код достаточно прозрачный, поэтому в комментировании не нуждается. Отмечу лишь то, что такой подход несколько более читабелен. Намного понятнее new FileNotExistsException(), чем new FileException(1). А минус данного подхода - создание огромного количества классов, что, впрочем, не так критично.

Вот таким образом можно создавать свои собственные исключения в PHP. Конечно, были разобраны далеко не все возможности, однако, я придерживаюсь принципа: рассказывать не о том, что я знаю, а о том, что я действительно использую в своей практике. А тем, кто хочет знать всё, можно посмотреть в справочнике подробнее обо всех возможностях исключений в PHP.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

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