<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

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

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

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

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

Ответить

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