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.
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.
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();
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.
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.
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%