PDO-Einbindung innerhalb der Klasse

8

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.

    
Dimitri 29.05.2013, 19:20
quelle

3 Antworten

3

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.

    
Ja͢ck 30.05.2013, 03:29
quelle
0

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.

    
christopher 29.05.2013 19:24
quelle
0

hier ist mein erster Versuch:

%Vor%

Ich bin mir nicht ganz sicher, ob das richtig ist, da ich im Moment keine Möglichkeit habe, dies zu testen. Würde dies als richtig angesehen werden?

    
Dimitri 30.05.2013 03:04
quelle

Tags und Links