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

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    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 régulier 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
    Points : 76
    Points
    76
    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 régulier 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
    Points : 76
    Points
    76
    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 : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    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 régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    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 régulier 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
    Points : 76
    Points
    76
    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

  7. #7
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Disons que pour le moment, le 3 tiers et moi... ça fait 3 justement :S

    A la base, je comptais séparer le html du php. En faisant mes recherches, j'ai appris ce qu'étaient les templates, pour apprendre qu'au final, avec des bonnes fonctions bien pensées, les templates n'étaient que très rarement utiles. Puis j'ai entendu parler des avantages de PHP5 avec ses objets, qui me permettrait d'avoir des modules facilement réutilisables (un peu comme les fonctions, en plus complet)... D'où mon début d'apprentissage du php5 (ou plutot de la POO).

    Je vais tenter de programmer mon livre d'or, et je posterais mon code ici (ainsi que mes questions), afin de voir s'il est correct techniquement, car j'ai un peu peur de faire ce que tu disais : de la programmation procédurale camouflée :S

    Merci de tes réponses, et à bientot

    [edit] au fait, si tu as des bons tuto sur la programmation objet avec php5, je suis preneur. J'en ai déjà trouvé quelques uns, mais bon... on ne sait jamais s'il n'y en a pas des mieux ailleurs :p

  8. #8
    Membre régulier 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
    Points : 76
    Points
    76
    Par défaut
    C'est normal que tu ne voie pas tout de suite comment penser objet et les interts que cela représente. Ca demande à etre un peu expérimenté, voir beaucoup. Mais je pense que ta démarce est bonne. Le livre d'or est un bon exercice pour débuter il me semble. Pour ce qui est des tutos, je n'en ait pas en tete a te conseiller mais n'hésite pas à lire des choses sur l'objet plus que sur PHP. Par exemple, tu pourais t'interesser à UML qui est un langage de modélisation dédié à l'objet. En gros l'idée est de concevoir une application à l'aide de diagrames avant de la coder. Dans ce domaine, je peux te conseiller ce livre : http://www.editions-eyrolles.com/Livre/9782212112467

    J'ai pas pu m'empecher de tester le code que je t'ai fourni précédement. Il y avait une petite coquille que je viens de corriger.
    Voici la version corrigée :
    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
    <?php
    mysql_connect('localhost', 'root', '');
    mysql_select_db('tests');
     
    $l=new LivreDor();
    $l->getMessagesFromBdd(2,5);
     
    $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,$messagePerPage"
    		;
    		echo $sql;
    		$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>';
    	}
    }
    ?>

  9. #9
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Petite question : est-il intéressant de séparer PHP et HTML, si je programme en objets? En effet, je serais tenté de mettre comme dans ton exemple, l'affichage DANS le code php, avec des echos... L'autre solution serait que la fonction me renvoie un résultat, et que ce retour soit traité, mais ça me parrait lourd (surtout si à chaques fois je dois ouvrir et fermer mes balises php) :S Par contre ça aurait l'intérêt de séparer le php du html (et par exemple personnaliser les messages d'erreur ou de confirmation)... D'un autre coté, je vais devoir sauvegarder mes messages quelque part, afin de rendre mon site multilingue! donc comme ça, pas de soucis

  10. #10
    Membre régulier 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
    Points : 76
    Points
    76
    Par défaut
    Personellement, je trouve que la génération du html par les objets n'est pas génante dans la mesure ou, en générale, on a une fonction bien définie de l'objet que lui permet d'afficher son contenu. La génération du code html est alor isolée dans une fonction et ne polue pas le reste. Cependant, les sites en php sont souvent un mix d'objets et de code facon script. Contrairement à Java ou tout est objet. Il est alors surement interessant d'utiliser un moteur de template. Je dis "surement" car je n'en ai jamais utilisé... D'autre part, la séparation des objets en 3 catégorie comme je l'ai évoquée tout a l'heure vise justement à séparer les domaines d'action des objets. Dans tous les cas, je pense qu'il faut tester, experimenter, meme si la solution choisie n'est pas idéale. Et d'un autre coté, il faut avoir du recule sur ce qu'on fait pour améliorer ses méthodes. C'est un équilibre a trouver... Mais etre paralisé parcequ'on veut faire au mieu est aussi grave que de foncer tete baissée à mon sens.
    Pour finir, je dirais que je suis débutant en la matiere et que si un expert passe dans le coin, son opignon sur la question m'interesse beaucoup...

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par monstroplante
    C'est normal que tu ne voie pas tout de suite comment penser objet et les interts que cela représente. Ca demande à etre un peu expérimenté, voir beaucoup. Mais je pense que ta démarce est bonne. Le livre d'or est un bon exercice pour débuter il me semble. Pour ce qui est des tutos, je n'en ait pas en tete a te conseiller mais n'hésite pas à lire des choses sur l'objet plus que sur PHP. Par exemple, tu pourais t'interesser à UML qui est un langage de modélisation dédié à l'objet. En gros l'idée est de concevoir une application à l'aide de diagrames avant de la coder. Dans ce domaine, je peux te conseiller ce livre : http://www.editions-eyrolles.com/Livre/9782212112467

    J'ai pas pu m'empecher de tester le code que je t'ai fourni précédement. Il y avait une petite coquille que je viens de corriger.
    Voici la version corrigée :
    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
    <?php
    mysql_connect('localhost', 'root', '');
    mysql_select_db('tests');
     
    $l=new LivreDor();
    $l->getMessagesFromBdd(2,5);
     
    $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,$messagePerPage"
    		;
    		echo $sql;
    		$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>';
    	}
    }
    ?>

    Bonjour,

    je suis moi-même également intéressé par cette manière de programmer qui est la POO. Comme je débute, pourrais-tu expliquer la ligne suivante qui se trouve dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->addMessage(new Message($array['mes_titre'], $array['mes_corp']));
    C'est surtout le "new" que je ne comprend pas. "new" est un constructeur, ça voudrai dire que Message($array['mes_titre'] est une classe ? pas possible, donc pourquoi new?

  12. #12
    Membre régulier 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
    Points : 76
    Points
    76
    Par défaut
    "new" veut dire creer un nouvel objet. Pour ce faire on appel le constructeur de la classe que l'on veut instancier de la facon suivante : NomDeMaClasse(arguments requis par le constructeur).

    Cette methode est définie dans la classe Message de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public function __construct($t,$c){
    		$this->titre=$t;
    		$this->corp=$c;
    	}
    Le mot clé "__construct" permet en effet de définir le constructeur de la classe.

    Dans le cas de la ligne qui te pose problème, nous désirons créer un nouveau message pour le passer en parametre de la methode "addMessage" définie dans la classe LivreDor dont est issu "$this" (l'objet courant).

    Ca peut paraitre compliqué parceque j'utilise volontairement des thermes précis et que je rentre un peu dans le détail mais c'est plustot simple finalement.

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Ah oui !! En relisant une énième fois ton code, j'ai enfin compris !

    Et ta réponse m'amène à une nouvelle question que je me suis toujours posé mais dont je n'ai jamais été sûr, c'est à propos de la méthode pour le constructeur __construct, est-ce que c'est vrai qu'on l'a déclare uniquement lorsqu'on veut faire passer plus de 1 paramètres ?

  14. #14
    Membre régulier 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
    Points : 76
    Points
    76
    Par défaut
    Si tu n'as rien a faire l'ors de l'intanciation de ton objet, tu peux ne pas définir de constructeur. Dans tous les autres cas, tu es obligé d'en déclarer un. Cela te permet d'alimenter certais attributs de ton objet avec des arguments passés au constructeur et/ou de faire certaines opéraitions.

    Exemple d'un constructeur qui fait une opération mais ne nécessite pas d'arguments :
    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
    <?php
    echo '<div>';
    echo 'J\'ai instancié ' . Test::$cmpt . ' objet(s) de la classe "Test"';
    echo '<div>';
     
    for($i=0;$i<10;$i++)
    	new Test();
     
    echo '<div>';
    echo 'J\'ai instancié ' . Test::$cmpt . ' objet(s) de la classe "Test"';
    echo '<div>';
     
    class Test{
    	public static $cmpt=0;
     
    	public function __construct(){
    		echo '<div>Appel du constructeur de la classe "Test"</div>';
    		self::$cmpt++;
    	}
    }
    ?>
    J'en profite pour te montrer l'utilisation des attributs de classe (static).

+ 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