Вопрос по синглтону?

Не раз уже читал о нём, в т.ч. все ответы в недавней теме Для чего нужен singleton?

Взять простую реализацию без обёртки:
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
    $pdo = new PDO($dsn, $user, $pass, $opt);
} catch...

// Далее в приложении используем
$db=$pdo->prepare(" SELECT ");

В каждом экземпляре приложения в самом начале приложения создаётся экземпляр PDO. Кроме него обратиться к базе нет никакого способа, есть только одна переменная $pdo
Или же смысл синглтона в том, что есть такие системы где левая рука не знает что делает правая и какой-то программист в другой части системы делает ещё раз $pdo2 = new PDO() и теперь у нас $pdo и $pdo2?

Вот реализация из phprigthway
class Singleton
{
    protected static $instance;
    
    public static function getInstance()
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    protected function __construct(){}
    private function __clone(){}
    private function __wakeup(){}
}

class SingletonChild extends Singleton{}

$obj = Singleton::getInstance();
\var_dump($obj === Singleton::getInstance());             // bool(true)

$anotherObj = SingletonChild::getInstance();
\var_dump($anotherObj === Singleton::getInstance());      // bool(false)

\var_dump($anotherObj === SingletonChild::getInstance()); // bool(true)

Я правильно понимаю что её отличие только в том, что есть защита от дурака которая не позволяет создать $pdo2 как в первом примере?
  • Вопрос задан
  • 181 просмотр
Решения вопроса 3
kpa6uu
@kpa6uu
Программист Талибана [Пыхерский Алибаба]
Да, всё верно. В правильных синглтонах режутся возможные пути их создания/клонирования :)
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Смысл в том чтоб был один экземпляр, и не создавать второй даже если захотеть.
Экономия памяти, экономия ресурсов на повторной инициализации и связанных действиях(распарсить конфиг файл например).

www.phptherightway.com/pages/Design-Patterns.html#...
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Вы поняли верно, такая реализация не даёт нескольким разработчикам действовать несогласованно и плодить много объектов. Чаще всего используется в БД но подходит и для инициализации набора каких-либо конфигов например.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы