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/>';
 
?>