Ich habe ein Problem damit. Ich möchte anfangen, einen alten MySQL-Funktionscode PDO neu zu schreiben. Die Art und Weise, wie es eingerichtet wurde, ist eine externe Datei, die (unter anderem) diese Zeile enthält:
%Vor%Was würde eine Verbindung zu meiner Datenbank erstellen. Dies ist ganz oben auf meinen Seiten enthalten und würde auch alle meine Klassen laden. Wenn ich jetzt eine neue Verbindung mit PDO erstellen möchte, würde ich Folgendes tun:
%Vor%Allerdings kann ich diese Codezeile nicht in einer separaten Datei haben und PDO innerhalb einer Klasse wie folgt aufrufen:
%Vor%Bedeutet das, dass ich eine Verbindung im Konstruktor durch Aggregation wie folgt herstellen muss?
%Vor%Oder gibt es eine andere Möglichkeit, dies zu tun, die mir nicht bewusst ist. Es scheint mühsam zu versuchen, alle meine Klassen neu zu schreiben, um das zu integrieren.
Anstatt die Datenbankverbindung innerhalb des Konstruktors zu erstellen, ist es besser, eine Abhängigkeit herzustellen:
%Vor%Um es zu verwenden, würden Sie tun:
%Vor% Der Hauptvorteil dieses Ansatzes besteht darin, dass Sie keine Konfiguration mehr in Ihrer Klasse gespeichert haben. Darüber hinaus können Sie auch alles übergeben, was auch PDO
implementiert, indem Sie Einheitentests mit gemockten Datenbanken aktivieren.
Wenn Sie eine Verbindung zu einer Datenbank herstellen, sollten Sie dies in einer Singleton-Klasse tun. Sie möchten immer nur eine Verbindung zu einer Datenbank öffnen. Zum Beispiel:
%Vor% Dann können Sie die Methode database::getInstance()
von einer beliebigen Stelle in Ihrer Klasse aus aufrufen und müssen Ihren Verbindungscode nicht erneut schreiben.
PS: Ich bin mir bewusst, dass dieser Singleton nicht threadsicher ist. Ich habe einfach versucht, das Konzept zu OP hervorzuheben.