Classe d'accès à une base de données [Résolu]

Signaler
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
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...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
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.
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
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 -
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
non

class DB{
private static $instance=false;

....

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

}
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
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