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 :

Utilité de __construct [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut Utilité de __construct
    Bonjour,

    Aujourd'hui, j'ai essayé de comprendre l'utilité de __construct.
    Je pense avoir compris (voir le code ci-dessous).
    Je me demande si on m'a TOUT dit sur cette méthode.

    En gros, cela me permet d'écrire :

    $perso1 = new Personnage(10,2);
    $perso2 = new Personnage(90,58);

    Au lieu de :

    $perso1 = new Personnage();
    $perso2 = new Personnage();

    $perso1->setForce (10);
    $perso1->setExperience (2);

    $perso2->setForce (90);
    $perso2->setExperience (58);

    et cela m'évite (sans doute) de devoir créé des setters puisque la méthode __construct est en 'public'.

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php
     	class Personnage
        {
            private $force;
            private $localisation;
            private $experience;
            private $degats;
     
     // -----------------------------------------------------------------------------------------
     // __construct () permet d'initialiser les valeurs des attributs.
     //         Le reste du code est inchangé sauf lors des instanciations.
     // -----------------------------------------------------------------------------------------
     
            public function __construct ($force, $degats) // __construct attend 2 valeurs.
            {
                echo 'Un objet vient d\'être créé.<br/>'; // Message s'affichant à chaque instance.
                $this->force = $force; // Initialisation de la force à la 1e valeur entre ().
                $this->degats = $degats; // Initialisation des dégâts à la 2e valeur entre ().
                $this->experience = 1; // Initialisation de l'expérience à 1.
            }
     
    // ---------------------------------------------------------------------------------------
            public function deplacer()
            {
    		// Pour l'instant, aucune méthode.        
            }
     
    // ---------------------------------------------------------------------------------------
            // Ici, on exige de la méthode "frapper" un paramètre de la classe "Personnage". 
            public function frapper(Personnage $persoAFrapper)
            {
     
    // "$persoAFrapper->recevoirDegats" permet d'appeler de l'objet "$persoAFrapper"
    // la méthode recevoirDegats pour lui passer (à cette méthode) la valeur de $this->force.
    // NB La méthode "recevoirDegats" est plus loin; l'emplacement de la méthode importe peu
    // puisque l'on est ici dans une classe (dans la fabrication des plans de construction).
     
            $persoAFrapper->recevoirDegats ($this->force);
            }
     
    // ---------------------------------------------------------------------------------------
            public function gagnerExperience()
            {
                $this->experience++;
                // Ce qui signidie $this->experience = $this->experience + 1
            }
     
    // ---------------------------------------------------------------------------------------
    // Dans cette méthode $persoAFrapper (ou tout autre Personnage créé) se reçoit des dégâts
    // qui ont une valeur égal à la force (+1 point).
     
            public function recevoirDegats ($force)
            {
                $this->degats += $force;
                // Ce qui signifie $this->degats = $force + 1;
            }
     
    // -----------------------------------------------------------------------------------------
    // On crée ci-dessous les setters afin de pouvoir obtenir la valeur chaque attribut private.
    // -----------------------------------------------------------------------------------------
     
            public function setForce ($force)
            {
                if (is_int ($force)) // On vérifie bien qu'on ne met pas n'importe quoi.
                    $this->force = $force;
            }
     
            public function setExperience ($experience)
            {
                if (is_int ($experience))
                    $this->experience = $experience;
            }
     
    // -----------------------------------------------------------------------------------------
    // On crée ci-dessous les getters afin de pouvoir obtenir la valeur chaque attribut private.
    // -----------------------------------------------------------------------------------------
     
            public function getForce()
            {
                return $this->force;
            }
     
        	public function getLocalisation()
            {
                return $this->localisation;
            }
     
            public function getExperience()
            {
                return $this->experience;
            }
     
            public function getDegats()
            {
                return $this->degats;
            }
        }
     
    // -----------------------------------------------------------------------------------
    // On crée de nouvelles instances et on leur attribue des valeurs.
    // -----------------------------------------------------------------------------------
     
        $perso1 = new Personnage(10,5);
        $perso2 = new Personnage(90,30);
     
        $perso1->frapper ($perso2); // $perso1 frappe $perso2.
        $perso1->gagnerExperience(); // On gagne de l'expérience.
     
        $perso2->frapper ($perso1); // $perso1 frappe $perso2.
        $perso2->gagnerExperience(); // On gagne de l'expérience.
     
        echo 'Le premier personnage a ' . $perso1->getForce() . ' de force, contrairement au second qui a ' . $perso2->getForce() . ' de force.<br />';
        echo 'Le premier personnage a ' . $perso1->getExperience() . ' d\'expérience, contrairement au second qui a ' . $perso2->getExperience() . ' d\'expérience.<br />';
        echo 'Le premier personnage a ' . $perso1->getDegats() . ' de dégâts, contrairement au second qui a ' . $perso2->getDegats() . ' de dégâts.<br />';
     
    echo '<br/>';
     
    echo '------------------------------------------------------------------------------------------------------------------------------<br/><br/>';
     
    ?>

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Grosso modo c'est ça ....
    dinsons que c'est le constructeur de la classe, ça te permts d'initialiser celle ci avec des valeurs soit explicitement comme tu l'as fais en lui ajoutant des parametres soit directement dedans sans ajouter de paramètres.

    Si tu n'as rien a faire lors de la construction d'un objet tu n'as pas besoin de la declarer .
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

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

Discussions similaires

  1. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  2. [J2EE] Utilité de la J2EE de SUN ?
    Par PeteMitchell dans le forum Java EE
    Réponses: 4
    Dernier message: 14/05/2004, 10h29
  3. [LG]Utilité du type enuméré ?
    Par tarbala dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2003, 16h20
  4. Le BIOS et son utilité
    Par le mage tophinus dans le forum Assembleur
    Réponses: 75
    Dernier message: 21/11/2003, 15h37
  5. utilité du binaire et hexadecimaux?
    Par souris78 dans le forum C
    Réponses: 9
    Dernier message: 01/07/2003, 15h08

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