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 :

php POO question sur les class et requetes SQL


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut php POO question sur les class et requetes SQL
    Bonjour,

    Je me met à nouveau sur la POO (je fait mon come back j'avais déjà eu du mal la première fois) et je bloc à nouveau sur la même question que la première fois.

    Je vous explique

    Actuellement j'utilise des fonctions du style :
    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
    31
    32
    33
    34
    35
    36
    37
    <?php
    // RECUPERATION DES INFOS DE TOUS LES UTILISATEURS
    function GetAll_Uilisateur()
    {
        $LesValeurs=Array();
        $i=0;
     
        // ecriture de la requete
            $RQT='SELECT u.ID_UTILISATEUR, CONCAT(u.PRENOM, " ", u.NOM) as NomPrenom, u.EMAIL,
                    s.NOM
                    FROM utilisateur u
                     
                    INNER JOIN service s
                        ON u.ID_SERVICE= s.ID_SERVICE
                     
                     
                    ORDER BY PRENOM ASC
                     
                ';
     
        $Query = @mysql_query($RQT); // execution de la requete
     
        // si la requète est correctement executée
        if($Query)
        {
            while($Fetch = mysql_fetch_assoc($Query))
            {  
                $LesValeurs[$i] = $Fetch;
                $i++;
     
            }
            return $LesValeurs; // on retorune les valeurs
        }
     
            else { echo 'Erreur lors de l\'execution de la fonction GetAll_Uilisateur veuillez contacter le developpeur'; }
    }
    ?>


    Ensuite pour afficher le contenu :

    Dans mon CONTROLEUR je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    /********************       RECUPERATION DES VALEURS    ************************/  
     
    // recuperation du nombre d'utilisateur
        $Nb_Employe = count(GetAll_Utilisateur());     
     
    // recuperation des infos de tous les utilisateurs
        $All_Utilisateur = GetAll_Utilisateur();
    ?>
    Et dans ma VUE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    for($i=0; $i<$Nb_Utilisateur; $i++)
    {
        echo $All_Utilisateur[$i]['NomPrenom'].'<br/>'; // Nom et prenom de l'utilisateur
        echo $All_Utilisateur[$i]['EMAIL'].'<br/>'; // email de l'utilisateur
        echo $All_Utilisateur[$i]['NOM'].'<br/>'; // Nom du service
    }
    ?>



    Maintenant je me demande comment je doit faire pour mes class.
    Dans son tuto sur la POO, Victor ne soulève pas la possibilité de récupère les données sur plusieurs tables.

    Ma question est donc : Comment doit-je m'y prendre?
    Est ce que je doit créer une class pour chaque table?

    En POO, il y a une phrase très importante qu'il faut que vous ayez constamment en tête : « Une classe, un rôle. » Maintenant, répondez clairement à cette question : « Quel est le rôle d'une classe commePersonnage» ?
    Un objet instanciant une classe comme Personnage a pour rôle de représenter une ligne présente en BDD. Le verbe « représenter » est ici très important. En effet, « représenter » est très différent de « gérer ». Une ligne de la BDD ne peut pas s'auto-gérer ! C'est comme si vous demandiez à un ouvrier ayant construit un produit de le commercialiser : l'ouvrier est tout à fait capable de le construire, c'est sonrôle, mais il ne s'occupe pas du tout de sa gestion, il en est incapable. Il faut donc qu'une deuxième personne intervienne, un commercial, qui va s'occuper de vendre ce produit.


    Je n'ai pas compris à 100% ce que voulais dire victor dans le paragraphe ci-dessus mais je pense que cela repond à ma question avec un grand NON.

    Maintenant si je créé une class Utilisateur :

    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
    31
    <?php
    class Utilisateur
    {
        // LISTE DES ATTRIBUTS
            private $_id_utilisateur;
            private $_nom;
            private $_prenom;
            private $_email;
     
     
        public function __construct($donnees)
        {
            $this -> hydrate($donnees);
        }
     
        public function hydrate(array $donnees)
        {
            foreach($donnees as $key => $value)
            {
                //On récupère le nom du setter correspondant à l'attribut
                    $method = 'set'.ucfirst($key);
     
                //Si le setter correspondant existe
                    if(method_exists($this, $method))
                    {
                        //On appel le setter
                            $this -> $method($value);
                    }
            }
        }
    ?>

    et une class UtilisateurManager comme ceci

    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
    31
    32
    <?php
    class UtilisateurManager
    {
        private $_db; //insctance de pdo
     
        public function __construct($db)
        {
            $this -> setDb($db);
        }
     
        public function getAll()
        {
     
     
            $Query = $this -> _db -> query(' SELECT u.ID_UTILISATEUR, CONCAT(u.PRENOM, " ", u.NOM) as NomPrenom, u.EMAIL,
                        s.NOM
                        FROM utilisateur u
                        INNER JOIN service s
                            ON u.ID_SERVICE= s.ID_SERVICE
                        ORDER BY PRENOM ASC
                                            );
                                             
             
            while($donnees = $Query ->fetch(PDO::FETCH_ASSOC))
            {
                $utilisateurs[] = new Utilisateur($donnees);
            }
             
            return $utilisateurs;
        }
    }
    ?>

    Il est impossible de récupérer le nom du service de la table service.

    voilà ce que je ne comprend pas

    Dans ce cas comment je doit créer mes class si je me base sur la manière dont je créé mes fonctions actuellement (comme je vous ai montré au début.)

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Déjà, sache que tu es bien parti et que tu as compris pas mal de chose.

    En fait, au début tu peux partir du fait qu'il te faut une classe par table dans la base de données (c'est pas vrai tout le temps attention). Donc il te faut une classe Service, comme il te faut une classe Utilisateur.

    Le principe, est de lier un Objet Utilisateur à un Objet Service quand tu créer celui-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Utilisateur
    {
        // LISTE DES ATTRIBUTS
            private $_id_utilisateur;
            private $_nom;
            private $_prenom;
            private $_email;
            private Service $service
    A la création de l'utilisateur, tu créer également l'objet service qui lui est lié et tu as ainsi accès également à toutes ses propriétés. C'est un debut de concept d'ORM

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Déjà, sache que tu es bien parti et que tu as compris pas mal de chose
    Merci ça me motive !!!




    A la création de l'utilisateur, tu créer également l'objet service qui lui est lié et tu as ainsi accès également à toutes ses propriétés. C'est un debut de concept d'ORM
    Je vais regarder ça de suite.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Du coup je me penche sur l'ORM doucement dès que j'ai un peu de temps libre.
    C'est pas simple tout ça.


    Merci Spartacusply.

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un question sur les classes
    Par willycat dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2008, 17h55
  2. Questions sur les classes en C#
    Par greg2 dans le forum C#
    Réponses: 11
    Dernier message: 05/11/2007, 19h57
  3. [POO] Questions sur une classe get
    Par beegees dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2007, 10h40
  4. [POO] question sur les interfaces
    Par root76 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/05/2006, 17h12
  5. [POO]Question sur les constructeurs
    Par Burinho dans le forum Langage
    Réponses: 16
    Dernier message: 08/04/2006, 21h56

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