<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

Исключения в PHP

Исключения в PHP

При возникновении каких-либо ошибок чаще всего просто возвращают false. Затем там, где эта функция была вызвана, можно проверить её результат, и если там false, то выполнить соответствующие действия. Такой подход имеет недостатки (например, если там, где возникла проблема - вовсе не Ваш код, и Вы не знаете, откуда взялся false). Механизм исключений в PHP позволяет перехватить ошибку во время выполнения кода, которую затем можно обработать в наиболее подходящем месте программы. И что самое важное, данный механизм позволяет получить код ошибки. Давайте разберём механизм исключений в PHP более подробно.

Напишем вот такой код:

<?php
class DataBase {
  private $mysqli;
  public function connect($host, $user, $password, $db) {
    $this->mysqli = @new mysqli($host, $user, $password, $db);
  }
}
$db = new DataBase();
$db->connect("localhost", "root", "", "lesson-local");
?>

Не думаю, что код нуждается в комментировании. Отмечу только наличие оператора "@", который заглушает возможные ошибки. Но теперь представим ситуацию, что пользователь передал в метод connect() неправильные данные. Нам не нужны никакие Warning, выводящиеся через PHP - они испортят дизайн сайта, однако, нам необходимо эти ошибки, тем не менее, обрабатывать. Можно, конечно, написать так:

if ($this->mysqli->connect_errno != 0) return false;

И большинство так и напишет. Но в этом случае мы не сможем понять, а что это была за ошибка? И вот тут как раз приходят на помощь исключения. Задача разработчика класса выбрасывать исключения при некорректных переданных параметрах, а так же сообщать из-за какого именно параметра или что вообще не так работает. А уже обработка этих исключений лежит на стороне клиента:

<?php
class DataBase {
  private $mysqli;
  public function connect($host, $user, $password, $db) {
    $this->mysqli = @new mysqli($host, $user, $password, $db);
    if ($this->mysqli->connect_errno != 0) {
      if ($this->mysqli->connect_errno == 2002) throw new Exception("ERROR_HOST"); // Выбрасываем исключение, если ошибка связана с адресом хоста
      elseif ($this->mysqli->connect_errno == 1044) throw new Exception("ERROR_AUTH"); // Выбрасываем исключение, если ошибка связана с именем пользователя и паролем
      elseif ($this->mysqli->connect_errno == 1049) throw new Exception("ERROR_DB"); // Выбрасываем исключение, если ошибка связана с названием базы данных
    }
  }
}
$db = new DataBase();
try { // "Пытаемся" выполнить код
  $db->connect("localhost", "root", "", "lesson-local");
  echo "Подключение удалось";
} catch (Exception $e) {
  /* В этот блок мы попадаем, если было выброшено исключение */
  echo $e->getMessage(); // Можно вместо этого добавить if и вывести более понятную надпись, чем, например, просто ERROR_HOST
}
?>

Добавлю, что ещё есть и второй параметр у Exception - code. В примере выше мы использовали только параметр message. Так же стоит отметить, что при выбрасывании исключения (то есть при throw new Exception()), PHP будет искать первый try-catch. Например, если бы метод connect() вызывал другой метод, и в этом бы другом методе было выброшено исключение, то PHP сначала бы искал try-catch в этом другом методе, затем, не найдя его, поднялся бы на уровень выше, то есть в метод connect(). Не найдя там try-catch, он поднимется ещё выше, то есть туда, откуда был вызван метод connect(), и если вдруг и там не будет необходимого try-catch, то PHP выдаст Warning.

В следующей статье мы разберём возможность создания своих собственных классов-исключений.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

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