Eine Datenbankklasse in meiner Benutzerklasse verwenden

7

In meinem Projekt habe ich eine Datenbankklasse, mit der ich alle MySQL-Sachen behandle. Es verbindet sich mit einer Datenbank, führt Abfragen aus, fängt Fehler ab und schließt die Verbindung.

Jetzt muss ich einen Mitgliederbereich auf meiner Site erstellen, und ich wollte eine Benutzerklasse erstellen, die mit der Registrierung, der Anmeldung, dem Ändern von Kennwörtern / Benutzernamen, dem Zurücksetzen und dem Abmelden umgehen würde. In dieser Benutzerklasse muss ich MySQL aus offensichtlichen Gründen verwenden ... wofür meine Datenbankklasse geschaffen wurde.

Aber ich bin verwirrt, wie ich meine Datenbankklasse in meiner Benutzerklasse verwenden würde. Soll ich ein neues Datenbankobjekt für meine Benutzerklasse erstellen und es dann schließen lassen, wenn eine Methode in dieser Klasse beendet ist? Oder mache ich irgendwie eine "globale" Datenbank-Klasse, die in meinem gesamten Skript verwendet werden kann (wenn dies der Fall ist, brauche ich Hilfe dabei, keine Ahnung, was ich dort tun soll.)

Danke für jedes Feedback, das Sie mir geben können.

    
Josh 05.04.2010, 02:19
quelle

6 Antworten

21

Einfacher 3-Schritt-Prozess. 1 / Erstellen Sie ein Datenbankobjekt. 2 / Geben Sie es Ihrem Benutzerklassenkonstruktor. 3 / Benutze es in den Benutzermethoden.

Kleines Beispiel.

Datei Database.class.php:

%Vor%

In der User.class.php:

%Vor%

Nun in userManager.php zum Beispiel:

%Vor%

Wenn Sie den aktuellen Trendnamen dieser alten Technik wollen, googeln Sie "Dependency Injection". Das Singleton-Muster in PHP wird bald verschwinden.

    
Arkh 07.04.2010 10:01
quelle
1

Wie er gesagt hat, stellen Sie alle Ihre Funktionen in die Datenbankklasse und verwenden Sie das Datenbankobjekt, um auf diese Funktionen Ihrer Benutzerklasse zuzugreifen. Dies sollte die beste Methode in Ihrem Fall sein. Z.B:
global $database;
userclassvar = $database->doSomething();

    
Joey Ezekiel 05.04.2010 11:20
quelle
1

Was ich gerne mache, ist die Datenbankklasse mit dem Singleton-Muster zu berücksichtigen. Wenn Sie bereits ein Datenbankobjekt haben, wird es nur abgerufen, andernfalls wird ein neues erstellt. Zum Beispiel:

%Vor%

Und jetzt können Sie User 's $_link Eigenschaft verwenden, um die Datenbankfunktionen auszuführen, wie $this->_link->query(...) . Sie müssen das Db::getLink() nicht unbedingt in den Konstruktor einfügen, wenn Ihre Klasse nicht so oft mit der Datenbank interagieren muss.

    
Oliver Nagy 06.04.2010 18:07
quelle
0

Da Sie die Datenbank als Objekt verwenden, fügen Sie dem Objekt einfach Methoden hinzu, die Ihre "Benutzerklasse" verwenden kann, um sich um die Dinge zu kümmern, die es tun muss. Die Benutzerklasse kann einen Zeiger auf die Datenbankklasse enthalten. Die Datenbankklasse schützt Ihre Datenbank und stellt sicher, dass die Benutzerklasse sie entsprechend verwendet.

    
WhirlWind 05.04.2010 02:22
quelle
0

Hier ist eine Lösung mit PDO.

%Vor%     
Keith Potter 12.04.2013 23:47
quelle
0

Ich denke, der bessere Ansatz wäre, die Datenbankklasse zu erstellen, die sofort in einer Datenbank.php instatiiert und dann in die user.php aufgenommen wird. Jedes Mal, wenn Sie eine Funktion erstellen, die eine Datenbank benötigt, globalisieren Sie das Datenbankobjekt.

Überprüfen Sie dies. Datenbank.php

%Vor%

Hier ist die user.php

%Vor%     
user1910825 21.12.2012 20:35
quelle

Tags und Links