IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] mysql dans les autre classes ou pas?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut [POO] mysql dans les autre classes ou pas?
    Bonjour,
    voilà, j'ai un petit soucis, je suis entrain de faire un forum et.. peu importe, je dois utiliser mysql.


    Donc j'ai les classes suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?
    class FSection {
    }
     
    class FForum {
    }
     
    class FTopic {
    }
     
    class FPost {
    }
    Et j'ai une class mysql qui permet de se conencter à la basse de donnée.

    Seulement dois-je utiliser les metode pour chercher les donnée dans la base de donnée à partir des class forum ou de la class mysql?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
    class mysql {
        function __construct(){
            mysql_connect('host', 'log', 'mdp');
            mysql_selectdb('db');
        }
     
        function getFPost($id) {
            return $FPost =  mysql_query("select * from 'table' where id=".$id);
        }
    }
    class FPost {
        function __construct($FPost) {
            $this->titre = $FPost['titre'];
            $this->msg = $FPost['message'];
        }
    }
    $db = new db();
    $id = 1;
    $post[$id] = newFPost($db->getFPost($id));
    Ou bien plustot quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?
    class FPost {
        function __construct($FPost) {
            $this->titre = $FPost['titre'];
            $this->msg = $FPost['message'];
        }
        function obtainFPost($id) {
            $FPost = mysql_querry ("SELECT * FROM 'table' WHERE id = ". $id);
            $this->titre = $FPost['titre'];
            $this->msg = $FPost['message']
        }
    }
     
    mysql_connect('host', 'login', 'mdp');
    $id = 1;
    $fpost[$id] = new FPost($FPOST = array('titre' => '', 'message' => '');
    $fpost[$id]->obtainFPost($id)
    mysl_close();
    Je sais que les deux partie sont incorrecte ici syntaxiquement, mais c'est pour mieux me faire comprendre de ce que je veux dire mysql dans ou hors des classe du forum.


    Pourriez vous m'aidez?
    Merci d'avance.

  2. #2
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Points : 597
    Points
    597
    Par défaut
    Personnellement, je préfère l'exemple 2.

    Il faut eviter de donner des traitements trop nombreux à une meme classe. Ta classe a un role, il ne faut pas qu'elle le depasse.

    Son role ecrire une requete SQL et manipuler les données pour les envoyer dans la base.

    Son role n'est pas d'etablir la connexion avec la base et de realiser les requetes, pour ça il faut une autre classe.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Points : 95
    Points
    95
    Par défaut
    Hello !
    L'exemple un me parait pour ma part plus approprié mais avec quelques modifications. En effet, si tu veux vraiment que ton objet Mysql corresponde exactement à son nom (c'est à dire à la manipulation de la base Mysql), tu ne dois pas y intégrer des méthode concernant l'objet FPost. Car imagines si tu as FPost, FForum, Fx, Fy, F1, F2, etc... ta classe Mysql va devenir un vrai bazard.

    Il faudrait que ta classe Mysql se limite aux fonctions de base Mysql du style Connect, Query, Update, Close. Pour construire l'objet FPost tu peux ensuite utiliser un truc du style Factory.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?
    class mysql {
        function __construct(){
            mysql_connect('host', 'log', 'mdp');
            mysql_selectdb('db');
        }
     
        function query($req) {
            return mysql_query($req);
        }
     
        function close() {
            mysql_close();
        }
    }
    class FPostFactory {
        static function getFPost($id) {
            $mysql = new Mysql(x,y,z);
            $FPost = $mysql->query("select * from 'table' where id=".$id);
     
            return new FPost($FPost);
        }
    }
    class FPost {
        function __construct($FPost) {
            $this->titre = $FPost['titre'];
            $this->msg = $FPost['message'];
        }
    }
    Et pour l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $myPost = FPostFactory::getFPost($id);
    Et voila ! Et comme ca ta classe Mysql est ulta clean et tu peux construire tes objets FPost de manière super simple grâce à la Factory
    Par contre j'ai mis l'instanciation de la classe Mysql dans la Factory, c'est pas très judicieux, vaut mieux que ce soit créé en dehors.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Suffit d'utiliser une méthode static pour récupérer la connexion courante, genre singleton. Et puis on à rarement besoin d'ouvrir plus d'une connexion à une bdd.
    Pour ma part j'éviterais le constructeur qui prend un tableau en entrée, je préfère encore avoir une méthode dédié comme FPost::construireDepuisTuple($tuple).

Discussions similaires

  1. [POO] Accès d'une classe Mysql dans une autre classe
    Par anxious dans le forum Langage
    Réponses: 4
    Dernier message: 10/03/2010, 16h29
  2. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  3. [POO] utiliser une méthode présente dans une autre classe
    Par arnaudperfect dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 14h23
  4. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 15h13
  5. Réponses: 4
    Dernier message: 25/07/2006, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo