<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

Шаблон проектирования "Одиночка"(Pattern Singleton).

Шаблон проектирования "Одиночка"(Pattern Singleton).

Сегодня я хочу разобрать шаблон проектирования "одиночка", который очень часто используется в объектно-ориентированном программировании.

Шаблон проектирования "Одиночка" или Pattern Singleton нужен для того, чтобы у нас не было много однотипных объектов, а всегда использовался только один. В качестве примера можно привести класс для работы с базой данных.

class DB {
  protected $db;

  public function __construct() {
   $this->db = new Mysqli($host, $user, $pass, $database);
  }

  public function get() {}
  public function set() {}
  public function del() {}
}

$db1 = new DB();
$db2 = new DB();

У нас уже 2 объекта $db1 и $db2, а потом кто-нибудь, не зная, что уже есть такой объект, создаст третий и т.д. Это очень плохо сказывается на производительности и читаемости кода, а в нашем случае может произойти сбой, т.к. на хостинге ограниченное количество подключений к базе данных.

Чтобы решить эту проблему, и был придуман паттерн singleton.

class DB {
  protected $db;
  static private $instance = null;

  private function __construct() {
   $this->db = new Mysqli($host, $user, $pass, $database);
  }

  private function __clone() {}

  static function getInstance() {
   if(self::$instance == null) {
    self::$instance = new self();
   }
   return self::$instance;
  }
}

$db = new DB(); // ошибка

$db = DB::getInstance();
$db2 = DB::getInstance();
$db3 = DB::getInstance();

Чтобы создать объект обычным способом было нельзя, мы делаем наш конструктор приватным, но также не забываем и про то, что объекты могут клонироваться и закрываем также метод __clone. Дальше мы создаём статическое свойство $instance, которое по умолчанию равно null. Теперь создаём статический метод getInstance(), который проверяет, равно ли наше статическое свойство null? Если да, то мы создаём экземпляр нашего объекта и возвращаем его, а если же нет, то просто возвращаем его. Таким образом, у нас всегда будет один и тот же экземпляр, сколько бы мы их не создавали. Использовать его очень просто: присваиваем переменной значение, которое возвращает статический метод getInstance(), класса DB, а дальше работаем, как и с обычным объектом.

Итак, сегодня вы узнали, что такое паттерн singleton, а, главное, зачем он нужен и где его применять.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

irin irin 29.04.2014 16:05:32

Спасибо, очень полезная статья! Продолжайте пожалуйста писать о шаблонах проектирования.

Ответить

php_programmer php_programmer 29.04.2014 21:34:00

Спасибо за отзыв. Будем)

Ответить

procivam procivam 13.06.2014 01:05:59

Здравствуйте! Подскажите пожалуйста каким образом созданный экземпляр объекта подключения к БД, который в конструкторе сохраняется в $this-db попадает в свойство $instance? Я не вижу смысла создавать свойство db если в конструкторе нужно всего лишь вернуть соединение, которое в методе getInstance() присвоится в свойство $instance.

Ответить

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