À l'aide d'une base de données de classe dans ma classe user
Dans mon projet j'ai une base de données de la classe que j'utilise pour gérer tous les MySQL choses. Il se connecte à une base de données, exécute des requêtes, intercepte les erreurs et ferme la connexion.
Maintenant, j'ai besoin de créer un espace membres sur mon site, et j'allais à construire un utilisateur de la classe qui permettrait de gérer l'inscription, la connexion, le mot de passe/nom d'utilisateur changements/réinitialise et fermeture de la session. Dans cette classe users-je besoin pour utiliser MySQL pour des raisons évidentes... c'est ce que ma classe de base de données a été faite pour.
Mais je suis confus quant à la façon dont je voudrais utiliser ma base de données de classe dans ma classe users. Aurais-je envie de créer un objet de base de données pour mon utilisateur de la classe et puis les fermer à chaque fois qu'une méthode de la classe est finie? Ou dois-je faire en quelque sorte un "global" classe de base de données qui peut être utilisé tout au long de mon script (si c'est le cas, j'ai besoin d'aide avec ça, aucune idée de quoi faire.)
Merci pour tous les commentaires que vous pouvez me donner.
OriginalL'auteur Josh | 2010-04-05
Vous devez vous connecter pour publier un commentaire.
Simple, en 3 étapes.
1/création d'un objet de base de données.
2/Donner à votre constructeur de la classe.
3/l'Utiliser dans le manuel des méthodes.
Petit exemple.
Fichier Database.class.php :
Dans User.class.php :
Maintenant, dans userManager.php par exemple :
Si vous voulez que le courant branché nom de cette technique ancienne, google "Injection de Dépendance". Le pattern Singleton en php qui vont disparaître bientôt.
... bien que je n'arrive pas à accepter cette réponse sans inscription, lol
Alors... s'inscrire?
Cela peut être ans, mais merci pour l'affichage de cette -- été en regardant autour de 2 jours à essayer de comprendre pourquoi l'une de mes classes n'était pas en tirant dans ma classe DB id de connexion, ce qui a entraîné $this->_link pas de l'initiation, de donner mon mysqli_ [bla bla] en tant que premier paramètre. Merci encore.
OriginalL'auteur Arkh
Comme il l'a dit, mettre à toutes vos fonctions dans la base de données de la classe et de l'utilisation de l'objet de base de données pour accéder à ces fonctions à partir de votre classe d'utilisateur. Ce doit être la meilleure méthode dans votre cas.
Par exemple:
global $database;
userclassvar = $database->doSomething();
OriginalL'auteur Joey Ezekiel
Ce que j'aime faire est la classe de base de données avec le Le pattern Singleton à l'esprit. De cette façon, si vous avez déjà un objet de base de données, il va les chercher, sinon, crée un nouveau. Par exemple:
Et maintenant vous pouvez utiliser
User
's$_link
la propriété de faire les fonctions de base de données, comme$this->_link->query(...)
. Vous n'avez pas nécessairement besoin de mettre lesDb::getLink()
dans le constructeur si votre classe n'a pas d'interagir avec la base de données que beaucoup.OriginalL'auteur Oliver Nagy
Puisque vous utilisez la base de données comme un objet, pourquoi ne pas simplement ajouter des méthodes à l'objet de votre "les utilisateurs de la classe" peuvent utiliser pour prendre soin des choses qu'il doit faire. Les utilisateurs de la classe peut contenir un pointeur vers la classe de base de données. La classe de base de données permettra de protéger votre base de données, et s'assurer que les utilisateurs de la classe est de les utiliser de manière appropriée.
OO est à propos de l'encapsulation. Pour moi, il fait sens pour encapsuler la base de données de façon indépendante, puis des classes que l'accès, de sorte que seul celui-ci contrôle l'accès à la base de données. Cependant, d'autres modèles sont possibles. Avoir deux classes de l'accès à la base de données directement est possible, mais mon opinion est, qui ajoute plus de complexité.
Je suppose qu'une autre façon de faire consiste à instancier une base de données d'instance de classe qui se connecte à la base de données, puis utiliser une autre classe pour faire "utilisateur" des choses par l'intermédiaire d'une poignée de la base de données extraites de la base de données de classe... Qui devrait fonctionner, si vous préférez.
OriginalL'auteur WhirlWind
Voici une solution à l'aide de l'AOP.
OriginalL'auteur Keith Potter
Je pense que la meilleure approche serait de créer la base de données de la classe qui démarrent des instances directement sur son propre sur une database.php et de l'inclure sur user.php. ensuite, chaque fois que vous créez une fonction qui a besoin d'une base de données, vous globaliser l'objet de base de données.
Vérifier ce point.
databse.php
ici est la user.php
OriginalL'auteur user1910825