Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP модел на свързване с единична база данни

Използване на 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");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. count(*) и count(column_name), каква е разликата?

  2. Заявките за актуализиране на mysql имат ли полза от индекс?

  3. ГРЕШКА 1005 (HY000):Не може да се създаде таблица (errno:150)

  4. Производителност на MySQL IN оператор върху (голям?) брой стойности

  5. таблицата се посочва два пъти като цел за INSERT и като отделен източник на данни