Acces a une base de donnees da ns une classe : Maniere de faire...
2 réponses
Bruno Baguette
Bonjour,
De temps en temps, je dois corriger ou étendre des classes PHP qui
doivent interagir avec une base de données.
J'ai vu plusieurs manières de faire exploitées dans ces classes :
1) La chaine de connection est hardcodée dans le constructeur de la
classe (très crade).
2) Le constructeur prend un argument qui est la chaine de connection à
la base de données et se connecte lui-même à la base de données.
3) La classe va chercher une constante qui se trouve dans un
require_once situé avant la classe et se connecte lui-même à la base de
données (ce qui ne me plait pas car ca ajoute une dépendance).
4) Le constructeur prend un handle retourné par un pg_connect() effectué
avant de faire une instance de la classe.
Personnellement, j'aurais tendance à privilégier la technique (2), voire
la technique (4).
Ceci dit, je suis intéressé pour avoir vos avis à ce sujet là :-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Clifden
Ceci dit, je suis intéressé pour avoir vos avis à ce sujet là :-)
2 facons de faire pour ma part:
préambule J'ai une classe qui me sert de wrapper à ma BD. Dans le cas ou j'ai besoin d'avoir accès à plusieurs BD en meme temps, je met chacune des instances a cette classe dans un tableau:
$db['base1'],$db['base2']
ma variable est déclarée en globale, initialisée par un head.inc.php qui est en require de partout.
Ensuite, je fait soit:
technique 1) dans mes classes un global $db technique 2) passe par paramètre à mon constructeur de ma classe la variable $db
Ceci dit, je suis intéressé pour avoir vos avis à ce sujet là :-)
2 facons de faire pour ma part:
préambule
J'ai une classe qui me sert de wrapper à ma BD. Dans le cas ou j'ai
besoin d'avoir accès à plusieurs BD en meme temps, je met chacune des
instances a cette classe dans un tableau:
$db['base1'],$db['base2']
ma variable est déclarée en globale, initialisée par un head.inc.php qui
est en require de partout.
Ensuite, je fait soit:
technique 1) dans mes classes un global $db
technique 2) passe par paramètre à mon constructeur de ma classe la
variable $db
Ceci dit, je suis intéressé pour avoir vos avis à ce sujet là :-)
2 facons de faire pour ma part:
préambule J'ai une classe qui me sert de wrapper à ma BD. Dans le cas ou j'ai besoin d'avoir accès à plusieurs BD en meme temps, je met chacune des instances a cette classe dans un tableau:
$db['base1'],$db['base2']
ma variable est déclarée en globale, initialisée par un head.inc.php qui est en require de partout.
Ensuite, je fait soit:
technique 1) dans mes classes un global $db technique 2) passe par paramètre à mon constructeur de ma classe la variable $db
Pozzo
Bruno Baguette wrote:
Personnellement, j'aurais tendance à privilégier la technique (2), voire la technique (4).
J'abonde dans ce sens...
Personnellement je dirais que la solution 2 est préférable si votre classe permet de faire plusieurs requetes sans avoir à instancier plusieurs objets (et donc faire plusieurs connexions à la base en parallèle, ce qui serait inutile).
La technique 4 peut être intéressante si vous utilisez votre classe pour l'inclure dans un script php déjà existant et ouvrant déjà une connexion à une base. Dans ce cas l'utilisation de la classe n'ouvrira pas de connexion supplémentaire et ne nécessitera pas de modifier le code source existant. C'est nettement moins propre, mais c'est facile à faire (à maintenir c'est moins sur...)
-- Pozzo - Monsieur Propre
Bruno Baguette wrote:
Personnellement, j'aurais tendance à privilégier la technique (2), voire
la technique (4).
J'abonde dans ce sens...
Personnellement je dirais que la solution 2 est préférable si votre
classe permet de faire plusieurs requetes sans avoir à instancier
plusieurs objets (et donc faire plusieurs connexions à la base en
parallèle, ce qui serait inutile).
La technique 4 peut être intéressante si vous utilisez votre classe pour
l'inclure dans un script php déjà existant et ouvrant déjà une connexion
à une base. Dans ce cas l'utilisation de la classe n'ouvrira pas de
connexion supplémentaire et ne nécessitera pas de modifier le code
source existant. C'est nettement moins propre, mais c'est facile à faire
(à maintenir c'est moins sur...)
Personnellement, j'aurais tendance à privilégier la technique (2), voire la technique (4).
J'abonde dans ce sens...
Personnellement je dirais que la solution 2 est préférable si votre classe permet de faire plusieurs requetes sans avoir à instancier plusieurs objets (et donc faire plusieurs connexions à la base en parallèle, ce qui serait inutile).
La technique 4 peut être intéressante si vous utilisez votre classe pour l'inclure dans un script php déjà existant et ouvrant déjà une connexion à une base. Dans ce cas l'utilisation de la classe n'ouvrira pas de connexion supplémentaire et ne nécessitera pas de modifier le code source existant. C'est nettement moins propre, mais c'est facile à faire (à maintenir c'est moins sur...)