Задать вопрос

Паттерн Singleton в чём разница?

Прочитал описание тут:
job-blog.bullgare.ru/2009/07/паттерны-проектирования-в-php/

Некоторые ресурсы приложения уникальны, т.е. может быть один и только один его экземпляр. К примеру, соединение с базой данных через соответствующий дескриптор уникально. Нам нужно иметь доступ к созданному дескриптору базы данных, т.к. каждый раз при запросе открывать и закрывать соединение во время загрузки страницы накладно.
Для этого отлично подойдёт паттерн Singleton. Объект является синглтоном, если в приложении можно обратиться к одному и только к одному такому объекту.

Пример кода там на странице не смог скопировать.

Вопрос: чем этот навороченный код лучше
$db = mysqli_connect('localhost','aa','bb','cc');
mysqli_set_charset($db, "utf8");

Вот $db это Singleton ))
  • Вопрос задан
  • 898 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
edli007
@edli007
full stack, team lead
а вот mysqli_connect это переходная функция, созданная для говнокодеров, все еще не переведших свой сайт на PDO или для людей которые не могут это сделать по вине заказчика.

$db в данном случае не синглетон, так как синглетон должен обеспечить одну точку входа и один объект, а у вас
1. Вообще не объект и даже не ооп, из этого выплывает
1.1. Точка входа как таковая отсутствует, вы сначала создаете переменную и и дальше используете ее... как переменную.
1.2. Ваша переменная не защищена от изменений и может быть перезаписана в любой момент времени
1.3. Для доступа к переменной из любой точки кода, ее приодеться вывести в глобальную область видимости, в синглетоне это решается на уровне видимости классов

Будь это синглетон, внутри вашей переменной была бы зашита хитрая функция, создающая коннект при первом обращении к ней, а в последствии возвращающего егоже, также там можно было следить переключения на резервные бд и много чего еще. У вас коннект создается всегда, в фиксированном месте и даже если он ненужен - все равно создается.

И все это внутри самой переменной, что ведет нас к тому, что это должно быть сделано на ооп, так как такого функционала, для отслеживания первого обращения к переменной, в пхп просто нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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