Не раз уже читал о нём, в т.ч. все ответы в недавней теме
Для чего нужен 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 как в первом примере?