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.)