Classe d'accès à une base de données

Résolu
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 2 juin 2008 à 15:26
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 3 juin 2008 à 14:24
Bonjour à tous,

Voilà j'ai réalisé une classe de connexion à une base de données.
Seulement maintenant, pour l'utiliser, je suis face à un choix sur lequel j'ai du mal à me décider :
est-ce que je redéclare une nouvelle classe (et donc nouvelle connexion) dans chaque fonction qui doit executer une requete, ou alors je crée au début de ma page un objet (donc une connexion) et elle reste ouvert tout du long.
La 2è solution me semble être la meilleure, mais ça veut dire que pour toute classe ou fonction que je fais et qui a besoin d'executer une requete, il faut que je fasse :
global $database;
pour qu'elle soit accessible ?

Voilà, merci si vous pouvez m'aider.

- MadMatt -

 www.choisir-une-entreprise.com

5 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
3 juin 2008 à 14:24
ajouter une ligne de code et gagner en portabilite, proprete, lisibilite, facilite de debug, etc...

dans ta classe DB, tu peux gerer les Exceptions de ta db bien plus facilement, t'as des trucs facilement automatisables...
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 juin 2008 à 16:42
salut

tu peux utiliser un Singleton, et une methode static dans ta classe :
$db = DB::getConnection();

ca te permet de recuperer ta connection sans faire de globales ou sans la passer en parametre.
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
2 juin 2008 à 16:47
Effectivement pourquoi pas, je vois le principe.
Mais je ne comprend pas en quoi ça résoudrait mon problème. Je devrais quand même, dans chaque fonction qui doit faire une requete, récupérer l'instance de ma classe... Donc autant l'instancier 1 fois au début de page et faire global $DB; dans chaque fonction ?

Merci

- MadMatt -
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 juin 2008 à 16:52
non

class DB{
private static $instance=false;

....

public static function getInstance(){
if (self::$instance===false){
self::$instance = new DB();
}
return self::$instance;
}

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
3 juin 2008 à 09:46
Ah effectivement je connaissais pas le self::$instance, c'est interessant.

Mais la à l'utilisation (désolé d'etre redondant), je ne vois pas comment ça simplifiera mon problème. En effet, dans mes fonctions qui doivent executer des requetes, je devrais faire un : $DB = getInstance() pour pouvoir récupérer une instance de la classe ? Donc ça me contraint quand même à rajouter 1 ligne de code dans chaque fonction.
C'est pourquoi j'hésite à supprimer ma classe et utiliser des fonctions toutes bêtes à la place en fait...

Merci

- MadMatt -http://www.choisir-une-entreprise.com
0
Rejoignez-nous