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 Objet, bonne pratique


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Points : 41
    Points
    41
    Par défaut PHP Objet, bonne pratique
    Bonjour,

    Je développe actuellement mon premier projet en PHP Objet et je me pose une question.

    J'ai une classe Article, une classe Commentaires, une classe Utilisateur, ....

    La classe Article simplifiée se présente sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Article{
        $id;
        $titre;
        $contenu;
     
     
    }
    La classe Commentaire simplifiée se présente sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Commentaire{
        $id;
        $contenu;
    }
    Vous l'aurez compris, un Article est composé de commentaires;

    Que dois-je stocker dans ma classe Article pour faire la liaison avec les commentaires? Je vois deux solution :
    - un attribut $commentaires qui serait un Array d'objets Commentaire
    - un attribut $commentaires_id qui serait un Array des id de chacun des commentaires.

    Bien sûr les 2 solutions peuvent marcher, mais quelle est la plus judicieuse? Si je stoque les objets commentaire, cela facilite l'utilisation de ma class Article, mais je dois créer pour chaque article, les objets commentaires correspondant, et donc faire les requêtes SQL correspondant, sachant que je n'aurai pas besoin d'afficher les commentaires à chaque fois que j'utiliserai mon objet Article.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Et tu compte accéder à tes commentaire comment si tu n'as que les idées?
    refaire une requête pour chaque id? Si tu t'inquiète d'avoir un objet trop lourd alors sache qu'un array est un pointeur donc ton objet en soit sera un point d'acces à ces commentaires.

  3. #3
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Cela dépend de tes besoins. On peut imaginer un Array avec de commentaires instantiés et remplis. Mais pour les pages qui ne listent pas les commentaires ça peut faire lourd de tout charger.
    Ou bien un Array mixte d'id et d'objet commentaires. Dans ce second cas cela permet d'instantier le commentaire uniquement si l'on veut l'utiliser. Si le commentaire que l'on souhaite récupérer n'est qu'un entier dans l'array on instancie l'objet, on le place dans l'array à la place de l'id et on le renvoie pour traitement.

    Ce sont deux approches qui se valent suivant ce que tu veux faire.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je pense qu'il faut différencier 2 cas , l'affichage et l'édition. Pour l'affichage des commentaire , à mon avis c'est inutile d'instancier X objets commentaires. A part alourdir le traitement ça ne sert à rien.

    On peut donc imaginer que ta classe commentaire aura une méthode static du genre getAll(Actualite $oActu); qui te retourneras l'ensemble de tes commentires dans un simple tableaux associatif en fonction de l'objet actualité ou de l'id de l'actu.

    Tu n'auras besoin d'instancier un objet commentaire que lors de l'édition ou éventuellement de la suppression afin de profiter des fonctionnalités CRUD que tu auras mise en place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Edition
    $com = new Commentaire($idcom)
    $com->setText($_POST['texte_commentaire_edit']);
    $com->save();
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de Freyskeyd
    Homme Profil pro
    Développeur PHP | Flex
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur PHP | Flex
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 94
    Points
    94
    Par défaut
    ::

    Salut,

    D'après ce que j'ai compris.
    Tu as deux cas de figures.

    Le cas où tu ne veux afficher qu'un article sans commentaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $res = mysql_query($request);
    $article = ($res)?new Article($res):null;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Article{
       public function __construct($array=null){
             if(!empty($array)){
                $this->id = $array['id'];
                $this->truc = $array['truc'];
               }
        }
    }
    Si tu veux les commentaires d'un article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $res = mysql_query($request);
    $article = ($res)? new Article($res):null;
    if(!empty($article)){
        $article->getComm(true);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getComm($forceUpdate=false){
        if($forceUpdate){
    		$this->commentaires = array();
    		$query = 'ta requete';
    		$result = mysql_query($query);
    		foreach($result as $value){
    			$this->commentaires[] = new Commentaires($value);
    		}
    	}
    	return $this->commentaires;
    }
    Je ferai un truc comme ça moi.

  6. #6
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Moi perso :
    - je créerais bien une propriété qui s'appellerait commentsList et qui contiendrait un array d'objets Commentaire.
    - toutes mes propriétés sont private
    - je les lis ou modifie via des accesseurs get_variable set_variable
    - pour optimiser un peu, tu ne va chercher tes commentaires en base que dans l'accesseur get_commentaires.
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour pas être le 6ème à donner mon avis, je te donnerai le conseil suivant:
    - équipe ta classe Article d'une méthode publique getComments
    - cette méthode doit vérifier la validité de la propriété membre $_comments de Article et l'initialiser avec les données reçues de MySQL (ou autre) si elle est vide
    - sinon elle renvoie directement la liste des commentaires chargés
    - éventuellement tu peux mettre un cache

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/09/2019, 01h02
  2. javascript orienté objet: bonne pratique et héritage
    Par negstek dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 31/08/2011, 19h27
  3. Formulaire : envoi d'objet (bonne pratique)
    Par boboss123 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 22/12/2010, 11h35
  4. [Sécurité] Bonnes pratiques PHP
    Par mamiberkof dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2008, 00h13

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