<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

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

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

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

Подписавшись по 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):

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