<MyRusakov.ru />

Финансовая грамотность от А до Я

Финансовая грамотность от А до Я

Данный курс в кратчайшие сроки обучит Вас финансовой грамотности. Эти знания позволят Вам получить, как минимум, серьёзную финансовую стабильность, а, как максимум, финансовую независимость.

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

Помимо самого курса Вас ждёт ещё бесплатный ценный Бонус: «Ранний выход на пенсию». В рамках этого Бонуса Вы узнаете, какой должен быть капитал конкретно в Вашем случае, варианты его получения, а также какие есть стратегии вывода капитала на пенсии и где их можно протестировать.

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

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

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

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

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