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 :

Organisation de mes classes


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut Organisation de mes classes
    Bonjour à tous,

    je développe en php depuis longtemps mais il est temps pour d'évoluer : fini le procédural et bonjour l'objet !
    bon ça c'est facile à dire

    En fait, j'ai commencé à monter un projet rapide pour apprendre l'objet et je suis confronté à un dileme.
    Voici un exemple basique pour m'expliquer :
    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
    class user {
     
    private $id;
    private $nom;
    private $prenom;
    private $login;
    private $password;
     
    function __construct($id,$nom,$prenom,$login,$password)
    {
    $this->id = $id;
    $this->nom= $nom;
    $this->prenom= $prenom;
    $this->login= $login;
    $this->password= $password;
    }
     
    function getNom()
    {
    return $this->nom;
    }
    function getUserDB($id)
    {
    //requete de selection de mon user en fonction de l'id qui renseigne les variables privées
    }
     
    function updateUserDB()
    {
    //requete qui met mon user a jour dans la BDD
    }
     
    ....
     
    }
    Avec ceci je me demande comment gérer mes requêtes de selection pour avoir une liste de mes users par exemple.
    De plus, est-ce que ma façon de faire est bonne ou pas ?

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je te sens perturbé, hein ?
    Avoir une classe User avec des propriétés spécifiques à un User et avoir en même temps la possibilité de renvoyer une liste d'utilisateurs c'est pas très cohérent.

    Soit tu sépares les deux, soit tu adaptes le code.
    Si tu veux séparer, il est conseillé de passer par une autre classe ne gérant que les propriétés d'un utilisateur : UserDAO (DAO : data access object)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class UserDAO
    {
        private $id;
        private $nom;
        // ...
     
        public function __construct($id, $nom, ...)
        // ...
    }
    Et donc du coup ta classe de manipulation deviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class UserDb
    {
        public function add(UserDAO $user)
        // ....
     
        public function update(UserDAO $user)
        // ....
    }
    Soit tu optes pour du léger :
    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
    class User
    {
        /**
         * @param array $user [nom, prenom, login, password]
         * @return int|false
         */
        public function add(array $user)
        // ....
     
        /**
         * @param array $user [id, nom, prenom, login, password]
         * @return bool
         */
        public function update(array $user)
        // ....
    }
    Chaque méthode à ses avantages et inconvénients, tu les découvriras à l'usage.
    Vu la puissance du PHP en matière de manipulation de tableaux, ma préférence va quand même vers la légèreté.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    Donc si je comprend bien la solution "légère", j'obtiens une classe classique avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class user {
     
    ....
     
    function listeUser() {
    //execution de la requete select
     
    //puis return des resultats dans un array
    }
     
    ....
     
    }
    Mais du coup, ma fonction me retourne un tableau de user sachant que ma fonction est dans la classe user ?
    C'est assez perturbant effectivement...

    Et peux-tu me dire rapidement les avantages et inconvénients des 2 solutions ?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par ben01n Voir le message
    Mais du coup, ma fonction me retourne un tableau de user sachant que ma fonction est dans la classe user ?
    Non, le but c'est de manipuler que des tableaux : tu récupéreras un tableau de tableaux ou dit autrement, un tableau d'enregistrements, enregistrements sous forme de tableau associatif et pas un tableau d'instances de classe User.

    L'utilisation de la directive PDO::PDO_FETCH_CLASS pose des problèmes au moment de l'injection des valeurs : ces dernières sont initialisées avant l'appel du constructeur de la classe. Du coup il faut passer par PDO::FETCH_PROPS_LATE pour s'en sortir et encore il y a des cas où c'est problématique surtout si tu cherches le typage des attributs. Donc dans le cas où la récupération du résultat sous forme d'instance est obligatoire, il est parfois préférable de récupérer un simple tableau et de passer par une hydratation en bonne et du forme.

    Bon vu que tu débutes, je ne suis pas du tout sûr que tu ais compris mon explication ^^

Discussions similaires

  1. Organiser mes classes
    Par oasiscreation dans le forum Langage
    Réponses: 6
    Dernier message: 22/12/2009, 13h16
  2. Organiser mes classes
    Par TheBlackReverand dans le forum C#
    Réponses: 2
    Dernier message: 10/02/2008, 15h20
  3. Organisation et optimisation de mes classes?
    Par Sylk dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2007, 10h22
  4. [VB.Net 2.0] Comment organiser mes classes ?
    Par arno2000 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 26/06/2006, 15h28
  5. ClassWizard --> comment lui faire reconnaitre mes classes
    Par bigboomshakala dans le forum MFC
    Réponses: 6
    Dernier message: 06/05/2004, 10h50

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