Използване на singletons
в PHP се счита за лоша практика. От моя опит най-проблемният проблем с тях са единичните тестове. Трудно е да се гарантира, че два теста са независими при тестване на сингълтони.
Бих делегирал отговорността за ограничението „трябва да съществува само един екземпляр“ на кода, който създава обекта Db.
Също така за мен изглежда, че има неразбиране в начина на работа на Singletons в PHP за разлика от други езици:Ако имате 10 000 едновременни заявки например, тогава всяка заявка се изпълнява в отделен PHP процес или нишка, което означава, че всички те ще имат свои собствени екземпляр на "singleton", няма споделяне на този обект за повече от една заявка (при изпълнение на PHP в общи сценарии на уеб бекенда)
В PHP няма "обединяване на връзки", но можете да използвате mysqli
постоянни връзки за mysql. Може да се постигне чрез подаване на p:
пред името на хоста при създаване на mysqli. Това може да помогне тук, но се отнасяйте внимателно (което означава първо прочетете документацията )
Въпреки това, само за теория, сингълтон в PHP трябва да е наясно с факта, че някой може да използва clone
. Това означава, че във вашия случай би било възможно да се направи това:
$db = DB::getInstance();
$db2 = clone $db;
За да избегнете това, можете да приложите __clone()
метод като този:
public function __clone() {
throw new Exception("Can't clone a singleton");
}