Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wzorzec połączenia z bazą danych PHP singleton

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");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hash schemat bazy danych MySQL

  2. Jak prawidłowo oczyścić dane otrzymane z obszaru tekstowego podczas wyprowadzania ich z powrotem do obszaru tekstowego?

  3. Konwersja numeru epoki na datę czytelną dla człowieka w mysql

  4. Sqoop Import — funkcja pliku hasła nie działa poprawnie w sqoop 1.4.4

  5. Eksportuj dużą tabelę MySQL jako wiele mniejszych plików