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] Création d'un livre d'Or en php5


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut [POO] Création d'un livre d'Or en php5
    Bonjour,

    J'aimerais me mettre à PHP5, et surtout à la POO (tant qu'à faire). Pour me faire la main, je compte créer un livre d'Or.

    Ma question :
    Quelles classes devrais-je créer? Je pensais faire 1 classe 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
    class livredor
    {
        private $messages=array("id"=>"", "nom"=>"", "message"=>"");
     
        public function __construct ()
        {
        ... //appelle la fonction concernée selon l'action de l'utilisateur
        }
     
        public function afficher_message ()
        {
            ... // interrogation de la BDD + affichage des messages et du formulaire d'ajout/modif
        }
     
        public function ajout_message ($nom, $message)
        {
            ... // ajout du message dans la BDD + message de confirmation
        }
     
        public function supp_message ($id)
        {
            ... // suppression du message dans la BDD + message de confirmation
        }
     
        public function modif_message ($id)
        {
            ... // modif du message dans la BDD + message de confirmation
        }
    }
    et mon fichier utilisant cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $livre=new livredor(); //rien d'autre :p
    Suis-je plutot bien parti? Sinon comment voyez-vous la chose? Est-il intéressant que je transmette mon objet d'une page à l'autre afin de ne pas avoir à interroger la BDD, ou cela sera-t'il trop lourd (sérialiser la classe si elle a 1000 message, j'ai un peu peur)? Quelle est l'utilité d'une classe objet dans ce genre d'application, par rapport à l'utilisation de simples fonctions?

    Merci d'avance pour vos réponses!

  2. #2
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Pour parler grossierement du principe de la POO, je dirais que chaque entité qui peut avoir plusieur attributs doit etre un objet...

    Ce qui veut dire que dans ton cas, je commencerais par créer une classe "Message" qui aurait, par exemple, les attributs suivants :
    Titre, Auteur (peut etre un objet si on veut plus que son nom), date, corp...
    On peu imaginer ensuite une methode "display()" qui t'afficherais une div avec ton message dedans, le nom de l'auteur, la date...

    Tu aurrais ensuite une classe LivreDor dont un des attributs serait un tableau de messages. La methode "display()" de ton livre d'or ferait une boucle qui afficherais l'enssemble de tes messages. Exemple :
    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
     
    class LivreDor{
    	private $messages;//la liste des messages
     
    	//$message : un objet de la classe Message
    	public function addMessage($message){
    	    $this->messages[]=$message;
    	}
    	public function display(){
    	    echo '<div>';
    	    echo '<h1>Mon livre d\'or</h1>';
    	    foreach($this->messages as $message)
    	        message->display();
    	    echo '</div>';
    	}
    	//...
    }
    Ce n'est qu'un exemple trés sommaire mais je pense qu'il s'apparente plus à approche objet que ta première proposition.

    Je ne fais de l'objet que depuis 6 mois mais j'aprécie bcp le concepte. Je te souhaite de bien t'amuser

  3. #3
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Bon, comme j'ai la fleime de faire ce que je devrais (un truc en java) et que je voulais m'assurer de ne pas avoir fais d'erreur dans mon code, j'ai fait un petit exemple minimaliste mais fonctionnel.
    Le voici :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    $l=new LivreDor();
    $txt='bla bla bla bla blablabla blabla blabla bla bla bla blablabla bla
    	blabla blabla bla bla bla blablabla blabla blabla bla bla bla blabl
    	abla blabla blabla bla bla bla blablabla blabla blabla bla bla bla 
    	blablabla blabla blabla bla bla bla blablabla blabla blabla bla bla'
    ;
    $l->addMessage(new Message('Titre de mon messsage 1', $txt));
    $l->addMessage(new Message('Titre de mon messsage 2', $txt));
    $l->addMessage(new Message('Titre de mon messsage 3', $txt));
     
    $l->display();
     
    class LivreDor{
    	private $messages=array();//la liste des messages
     
    	//$message : un objet de la classe Message
    	public function addMessage($message){
    	    $this->messages[]=$message;
    	}
    	public function display(){
    	    echo '<div>';
    	    echo '<h1>Mon livre d\'or</h1>';
    	    foreach($this->messages as $message)
    	        $message->display();
    	    echo '</div>';
    	}
    	//...
    }
    class Message{
    	private $titre;
    	private $corp;
     
    	public function __construct($t,$c){
    		$this->titre=$t;
    		$this->corp=$c;
    	}
    	public function display(){
    		echo '<div>';
    		echo "<h2>$this->titre</h2>";
    		echo $this->corp;
    		echo '</div>';
    	}
    }
    ?>

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut
    Citation Envoyé par monstroplante
    Bon, comme j'ai la fleime de faire ce que je devrais (un truc en java) et que je voulais m'assurer de ne pas avoir fais d'erreur dans mon code, j'ai fait un petit exemple minimaliste mais fonctionnel.
    Le voici :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    $l=new LivreDor();
    $txt='bla bla bla bla blablabla blabla blabla bla bla bla blablabla bla
    	blabla blabla bla bla bla blablabla blabla blabla bla bla bla blabl
    	abla blabla blabla bla bla bla blablabla blabla blabla bla bla bla 
    	blablabla blabla blabla bla bla bla blablabla blabla blabla bla bla'
    ;
    $l->addMessage(new Message('Titre de mon messsage 1', $txt));
    $l->addMessage(new Message('Titre de mon messsage 2', $txt));
    $l->addMessage(new Message('Titre de mon messsage 3', $txt));
     
    $l->display();
     
    class LivreDor{
    	private $messages=array();//la liste des messages
     
    	//$message : un objet de la classe Message
    	public function addMessage($message){
    	    $this->messages[]=$message;
    	}
    	public function display(){
    	    echo '<div>';
    	    echo '<h1>Mon livre d\'or</h1>';
    	    foreach($this->messages as $message)
    	        $message->display();
    	    echo '</div>';
    	}
    	//...
    }
    class Message{
    	private $titre;
    	private $corp;
     
    	public function __construct($t,$c){
    		$this->titre=$t;
    		$this->corp=$c;
    	}
    	public function display(){
    		echo '<div>';
    		echo "<h2>$this->titre</h2>";
    		echo $this->corp;
    		echo '</div>';
    	}
    }
    ?>
    Oui c'est bien . J'aurais par contre forcer l'argument de cette méthode à être un objet de type Message puisque l'on peut le faire en php5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function addMessage(Message $message){
    	    $this->messages[]=$message;
    	}

  5. #5
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Merci pour vos réponses.

    Et quel est l'intérêt d'avoir une classe "livredor" dans ce cas? En effet, comme je vous le disais, je ne suis pas certain que ce soit une bonne idée de vouloir passer mon objet d'une page à l'autre (trop lourd), et dans ce cas, à la limite le fait de lister tous les messages n'a pas grand intérêt : dès que je vais vouloir ajouter, modifier, ou supprimer un message, cette liste va se recréer (puisque je rappellerais la page)...

  6. #6
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Le problème est le meme avec ton ancienne méthode...
    L'interet de faire deux classes distinctes, c'est la modularité de ton code. Si tu fais une seule grosse classe qui prend tout en charge, tu te retrouves a faire du procédural camouflé dans de l'objet.
    Un message est une entitée à part entiere : Il a plusieur proprétées et peut gerer son propre affichage. Il est donc interessant de lui consacrer une classe propre.
    La classe LivreDor, elle, permet d'organiser les messager entre eux. Dans sa méthode "display()", elle affiche son propre code html puis l'enssemble des messages qui generent eux meme leur code html. On pourait aussi imaginer que cette classe se charge elle meme d'instancier les messages qui la composent.
    On pourait par exemple imaginer la methode suivant :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    $l=new LivreDor();
    $txt='bla bla bla bla blablabla blabla blabla bla bla bla blablabla bla
    	blabla blabla bla bla bla blablabla blabla blabla bla bla bla blabl
    	abla blabla blabla bla bla bla blablabla blabla blabla bla bla bla 
    	blablabla blabla blabla bla bla bla blablabla blabla blabla bla bla'
    ;
    $l->addMessage(new Message('Titre de mon messsage 1', $txt));
    $l->addMessage(new Message('Titre de mon messsage 2', $txt));
    $l->addMessage(new Message('Titre de mon messsage 3', $txt));
     
    $l->display();
     
    class LivreDor{
    	private $messages=array();//la liste des messages
     
    	//$message : un objet de la classe Message
    	public function addMessage($message){
    	    $this->messages[]=$message;
    	}
    	public function display(){
    	    echo '<div>';
    	    echo '<h1>Mon livre d\'or</h1>';
    	    foreach($this->messages as $message)
    	        $message->display();
    	    echo '</div>';
    	}
     
    	//$page : numero de page
    	//$messagePerPage : resultats par page
    	public function getMessagesFromBdd($page=1, $messagePerPage=10){
    		$first=($page-1) * $messagePerPage;
    		//requete pour recupere les messages dans la bdd. Les noms de champ et de table
    		//pouraient etre des attributs de la classe pour plus d'adaptibilité
    		$sql="SELECT mes_titre, mes_corp
    			FROM table_message
    			ORDER BY mes_date
    			LIMIT $first,$this->messagePerPage"
    		;
    		$req=mysql_query($sql) or die(mysql_error());
    		while($array=mysql_fetch_array($req))
    			$this->addMessage(new Message($array['mes_titre'], $array['mes_corp']));
    	}
    	//...
    }
    class Message{
    	private $titre;
    	private $corp;
     
    	public function __construct($t,$c){
    		$this->titre=$t;
    		$this->corp=$c;
    	}
    	public function display(){
    		echo '<div>';
    		echo "<h2>$this->titre</h2>";
    		echo $this->corp;
    		echo '</div>';
    	}
    }
    ?>
    J'ai pas testé le code mais l'idée est la.

    A noter que ceci ne respecte pas l'architecture 3 tiers qui consise a separer tes objets en trois tiers :
    1 : Acces aux données
    2 : Objets metier
    3 : Traitement/affichage des objets du 2e tiers

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

Discussions similaires

  1. Création d'un livre d'or avec dreamweaver
    Par stanley dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 24/10/2008, 17h07
  2. [POO] création d'un objet
    Par Emcy dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/02/2007, 08h59
  3. [POO] Création d'un objet
    Par Rhadamanthe59 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2007, 13h43
  4. Réponses: 1
    Dernier message: 29/10/2006, 05h04
  5. [POO] création d'un objet de façon généric
    Par nickola dans le forum Langage
    Réponses: 7
    Dernier message: 04/10/2006, 13h21

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