Singletons : un mythe dans l'accès aux bases de données PHP
Vous remettez en question la nécessité des singletons pour l'accès aux bases de données PHP, en considérant le singleton simplifié suivant class :
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$db))
self::$db = new PDO(...);
return self::$db;
}
}
Copier après la connexion
Vous vous demandez pourquoi cela ne suffirait pas à la place d'une classe singleton plus complexe avec un singleton() méthode.
Démystifier l'utilité des singletons en PHP
En PHP, les singletons offrent peu ou pas d'avantages :
-
Mémoire Conservation : les singletons visent à réduire l'utilisation de la mémoire en partageant des instances en mémoire partagée. Cependant, en PHP, les objets résident dans la mémoire de requête privée, ce qui rend cet objectif non pertinent.
-
Application de Singleton : les singletons conceptuels peuvent ne pas nécessiter de mécanismes de langage pour leur application. Ne considérer que les singletons lors de la création d'une deuxième instance entraînera des effets néfastes.
Inconvénients des singletons
-
Couplage global : Singletons introduire des dépendances de portée globale, compliquant les tests et maintenabilité.
-
Alternative à l'injection de dépendances : Lorsqu'une seule instance est requise dans plusieurs classes, l'injection de dépendances fournit une solution plus propre et plus testable.
Le scepticisme d'Erich Gamma
Même l'un des créateurs du modèle singleton, Erich Gamma, remet désormais en question son utilité :
- "Je suis favorable à l'abandon du Singleton. Son utilisation est presque toujours une odeur de design"
Quand les singletons pourraient être applicables
Malgré le scepticisme général à l'égard des singletons en PHP, considérez ces scénarios :
-
Point d'accès global : La création d'un point d'accès global pour une instance au sein de la même requête PEUT être justifiée, mais peut introduire des problèmes de couplage et de maintenance.
-
Élimination des secondes instances : n'implémentez des singletons que lorsqu'il y a un besoin urgent d'empêcher des instances supplémentaires d'être créé.
Ressources supplémentaires
- [Tester des singletons en PHP : pourquoi c'est délicat](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
- [Inconvénients de Singleton Classes de base de données](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
- [Diagramme de décision pour les singletons](link_to_Singleton_Decision_Diagram)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!