Korzystanie z singletons
w PHP jest uważana za złą praktykę. Z mojego doświadczenia najbardziej problematyczna z nimi kwestia to testy jednostkowe. Przy testowaniu singletonów trudno jest zapewnić, aby dwa testy były niezależne.
Odpowiedzialność za ograniczenie „powinna istnieć tylko jedna instancja” przekazałbym na kod, który tworzy obiekt Db.
Również dla mnie wygląda na to, że istnieje nieporozumienie w sposobie działania Singletonów w PHP w przeciwieństwie do innych języków:Jeśli masz na przykład 10 000 jednoczesnych żądań, każde żądanie działa w oddzielnym procesie lub wątku PHP, co oznacza, że wszystkie będą miały swój własny instancja "singleton", nie ma udostępniania tego obiektu przez więcej niż jedno żądanie (podczas uruchamiania PHP w typowych scenariuszach backendu)
W PHP nie ma "zestawiania połączeń", ale możesz użyć mysqli
trwałe połączenia dla mysql. Można to osiągnąć, przekazując p:
przed nazwą hosta podczas tworzenia mysqli. To może pomóc tutaj, ale potraktuj to ostrożnie (co oznacza, że najpierw przeczytaj dokumentację )
Jednak tylko dla teorii, singleton w PHP musi być świadomy faktu, że ktoś może użyć clone
. Oznacza to, że w twoim przypadku byłoby to możliwe:
$db = DB::getInstance();
$db2 = clone $db;
Aby tego uniknąć, możesz zaimplementować __clone()
metoda taka:
public function __clone() {
throw new Exception("Can't clone a singleton");
}