PHP Singleton создается 2 экземпляра класса

php база данных pdo ооп singleton

class pffff {
static private $PDOInstance;

public function __construct()
{
$dsn = 'mysql:dbname=xxxxxxx;host=xxxxxx';
$username = 'xxxxxx';
$password = '4xxxxxxxxgxl';
echo "Object created!";
if(!self::$PDOInstance) {
try {
self::$PDOInstance = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$PDOInstance;
}


}
$a = new pffff();
$b = new pffff();

почему создается два подключения к дб, если верить синглтону, то подключение должно быть только одно?

Примечание:
я наверное ошибся...
echo "Object created!"; наверно надо было вставлять после того как
self::$PDOInstance = new PDO($dsn, $username, $password);
если использовать echo так, то видно что создается объект 1 раз.
Ответы:
попробуй if (empty(self::$PDOInstance))
Конечно, создается. У вас весь код в конструкторе. Конструктор вызывается при создании нового объекта. Попытка вернуть из него другой объект ни к чему не приведет (во-первых, новый объект уже создан, во-вторых, возврат чего-либо из конструктора не имеет смысла, т. к. конструктор вызывается при создании объекта, который и возвращается).
Зачем вы создаете объект там где он не нужен?


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.