sql >> Base de Datos >  >> RDS >> Mysql

Patrón de conexión de base de datos PHP singleton

Uso de singletons en PHP se considera una mala práctica. Según mi experiencia, el problema más problemático con ellos son las pruebas unitarias. Es difícil asegurar que dos pruebas sean independientes cuando se prueban singletons.

Delegaría la responsabilidad de la restricción "solo debería existir una instancia" al código que crea el objeto Db.

También para mí, parece que hay un malentendido sobre cómo funcionan los Singletons en PHP en contraste con otros lenguajes:si tiene 10.000 solicitudes simultáneas, por ejemplo, cada solicitud se ejecuta en un proceso o hilo de PHP separado, lo que significa que todos tendrán su propio instancia de "singleton", no se comparte este objeto para más de una sola solicitud (cuando se ejecuta PHP en escenarios comunes de back-end web)

No hay "agrupación de conexiones" en PHP, pero puede usar mysqli conexiones persistentes para mysql. Se puede lograr pasando el p: delante del nombre de host al crear mysqli. Esto podría ayudar aquí, pero trátelo con cuidado (es decir, lea la documentación primero )

Sin embargo, solo por teoría, un singleton en PHP debe ser consciente del hecho de que alguien podría usar clone . Lo que significa que en su caso sería posible hacer eso:

$db = DB::getInstance();
$db2 = clone $db; 

Para evitar eso, puede implementar el __clone() método como este:

public function __clone() {
    throw new Exception("Can't clone a singleton");
}