Singletons: Ein Mythos im PHP-Datenbankzugriff
Sie stellen die Notwendigkeit von Singletons für den PHP-Datenbankzugriff in Frage, wenn Sie den folgenden vereinfachten Singleton berücksichtigen Klasse:
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$db))
self::$db = new PDO(...);
return self::$db;
}
}
Sie fragen sich, warum dies nicht ausreichen würde, anstelle einer komplexeren Singleton-Klasse mit einem Singleton() Methode.
Entlarvung der Nützlichkeit von Singletons in PHP
In PHP bieten Singletons minimale bis keine Vorteile:
-
Speicher Erhaltung: Singletons zielen darauf ab, die Speichernutzung durch die gemeinsame Nutzung von Instanzen im gemeinsamen Speicher zu reduzieren. In PHP befinden sich Objekte jedoch im privaten Anforderungsspeicher, sodass dieser Zweck irrelevant ist.
-
Singleton erzwingen: Konzeptionelle Singletons erfordern möglicherweise keine Sprachmechanismen zur Durchsetzung. Berücksichtigen Sie nur Singletons, wenn das Erstellen einer zweiten Instanz nachteilige Auswirkungen hat.
Nachteile von Singletons
-
Globale Kopplung: Singletons Führen Sie globale Bereichsabhängigkeiten ein, was das Testen erschwert und Wartbarkeit.
-
Alternative zur Abhängigkeitsinjektion: Wenn eine einzelne Instanz über mehrere Klassen hinweg erforderlich ist, bietet die Abhängigkeitsinjektion eine sauberere und besser testbare Lösung.
Erich Gammas Skeptizismus
Sogar einer der Schöpfer des Singleton-Musters, Erich Gamma, stellt nun seine Nützlichkeit in Frage:
- „Ich bin dafür, Singleton fallenzulassen. Seine Verwendung ist fast immer ein Designgeruch“
Wann Singletons anwendbar sein könnten
Trotz der allgemeinen Skepsis gegenüber Singletons in PHP sollten Sie Folgendes berücksichtigen Szenarien:
-
Globaler Zugangspunkt: Das Erstellen eines globalen Zugangspunkts für eine Instanz innerhalb derselben Anfrage KANN gerechtfertigt sein, kann aber zu Kopplungs- und Wartungsproblemen führen.
-
Eliminierung zweiter Instanzen: Implementieren Sie Singletons nur dann, wenn ein dringender Bedarf besteht, die Entstehung zusätzlicher Instanzen zu verhindern erstellt.
Zusätzliche Ressourcen
- [Testen von Singletons in PHP: Warum es schwierig ist](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
- [Nachteile von Singleton Datenbankklassen](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
- [Entscheidungsdiagramm für Singletons](link_to_Singleton_Decision_Diagram)
Das obige ist der detaillierte Inhalt vonSind Singletons für den PHP-Datenbankzugriff wirklich notwendig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn