Синглтон (Singleton)

Синглтон (англ. Singleton) — класс, который может иметь только один экземпляр.

Singleton выполняется только один раз при создании. Далее он возвращает данные.

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

Ниже показан пример Singleton.

class DB
{
    private static $_instance;
    private $_connection;

    private function __construct()
    {
        $this->_connection = new mysqli('localhost', 'user', 'password', 'db_table');

        if ($this->_connection->connect_error) {
            exit('Не удалось подключиться. Ошибка №'.$mysqli->connect_errno.': '.$mysqli->connect_error);
        }
    }

    public static function getInstance()
    {
        if (!self::_instance) {
            self::_instance = new self;
        }

        return self::_instance;
    }

    public function query($sql)
    {
        return $this->_connection->query($sql);
    }

    // защищаем от создания второго экземпляра через клонирование
    private function __clone() {}

    // защищаем от создания второго экземпляра через unserialize
    private function __wakeup() {}
}

Пример работы Singleton.

$pages = DB::getInstance()->query('SELECT id,title FROM pages');
$users = DB::getInstance()->query('SELECT id,title FROM users');

while ($row = $pages->fetch_assoc()) {
    echo $row->title;
}

В переменной $pages идёт подключение к базе данных, а в переменной $users подключения нет, идёт сразу запрос на выборку данных.