Page 1 sur 1

Classes PHP et MySQL

Posté : 23 mars 2011, 11:41
par ViDikk
Bonjour,

Je suis en face d'un petit soucis de compréhension.
Je suis en train d'intégrer de l'objet (je débute avec ce type de prog) dans un site réalisé en procédural (ou évènementiel pour certains). Ma première classe concerne la gestions des utilisateurs. Tout fonctionne, mais un truc me titille.
Voici mon constructeur :

Code : Tout sélectionner

public function __construct($id = false){ // Récupération de l'user dans la BDD $this->connexion = new mysqli('localhost', 'root', 'pass', 'my_db'); if($id){ $this->SelectionUtilisateur($id); } } // Selectionner l'utilisateur dans la BDD public function SelectionUtilisateur($id){ // Récupération de l'user dans un tableau $result = $this->connexion->query("SELECT niveau_admin, utilisateur, motdepasse, nom, prenom, email, tel_fixe, tel_port FROM user WHERE user_id = ".$id); $user = $result->fetch_object(); $result->close(); //Valorisation de l'objet $this->id = $id; $this->niveau = $user->niveau_admin; $this->utilisateur = $user->utilisateur; $this->motdepasse = $user->motdepasse; $this->nom = $user->nom; $this->prenom = $user->prenom; $this->email = $user->email; $this->telfixe = $user->tel_fixe; $this->telport = $user->tel_port; }
Vous remarquez que je me connecte à la BDD pour ensuite faire mes requêtes. Ce qui m'inquiète, c'est qu'au moment où je vais créer plusieurs objets et d'autres classes, je vais refaire la même chose lorsque je devrais me connecter à ma BDD... Et cela va générer plusieurs connexion simultanées ! De plus, si je dois modifier l'utilisateur ou le base, je vais avoir un travail de titan...

Seulement, je n'arrive pas à visualiser comment avoir une seule connexion pour toutes les classes, afin qu'elles gèrent directement les requêtes...

EDIT : J'ai entendu parler de la sérialisation, je ne sais pas si c'est conseillé pour mon cas...
EDIT 2 : Désormais, j'ouvre ma connexion en début de page ($connexion = new mysqli(...)) puis dans mes classes j'appelle la connexion ouverte (global $connexion). Je ne sais pas si c'est la meilleure solution, mais en tout cas je n'ai plus qu'une connexion :) (enfin je crois... D'ailleurs, comment le vérifier?) Si vous avez mieux à proposer, je suis prenant !

Merci d'avance pour votre aide !

Re: Classes PHP et MySQL

Posté : 23 mars 2011, 12:35
par Mazarini
Bonjour,

Je suis encore très amateur en objet.

Ce que je ferai, c'est
- un objet "métier" personne qui contient uniquement les données d'une personne
- un objet "service" qui permet de lire une personne, de l'enregistrer ou de la supprimer (fonctions utilisable en static)
- un objet "DAL" (data access layer) qui fait le lien entre une table et un objet

Pour initialiser' une nouvelle personne : $personne = new Personne();
Pour chercher une personne existante $personne = service_personne::RechercheParId($id)
Pour enregistrer une personne service_personne::sauve($personne) (l'id vaut -1 pour une nouvelle parsonne)

Re: Classes PHP et MySQL

Posté : 25 mars 2011, 03:54
par devlop78
- Tu peux regarder du coté des ORM
- Un langage procédural n'est pas nécessairement évenementiel. Cette caractèristique est indépendante du procédural/objet, et d'ailleurs, un langage peut être procédural et objet (sinon, on dit qu'il est full object).
- Si tu utilises la POO, oublie les "global", et utilises par exemple une classe de base de données (par exemple nommée DB, en Singleton, et dans chaque constructeur de table modèle, tu peux faire $this->bdd = DB::getInstance()); La connexion ne se fera ainsi qu'une seule fois.