Implémenter des méthodes
La programmation orientée objet en PHP
Implémenter d'autres méthodes
Nous allons implémente une autre méthode : la méthode frapper(), qui devra infliger des dégâts à un personnage. Pour partir sur une base commune, nous allons travailler sur cette classe :<?php
class Personnage {
private $_degats = 0; // Les dégâts du personnage.
private $_experience = 0; // L'expérience du personnage.
private $_force = 20; // La force du personnage (plus elle est grande, plus l'attaque est puissante).
public function gagnerExperience() {
// On ajoute 1 à notre attribut $_experience.
$this->_experience = $this->_experience + 1;
}
}
Commençons par penser à notre méthode frapper(). Cette méthode doit accepter un argument : le personnage à frapper. La méthode aura juste pour rôle d'augmenter les dégâts du personnage passé en paramètre.
Pour vous aider à visualiser le contenu de la méthode, imaginez votre code manipulant des objets. Il doit ressembler à ceci :
<?php
// On crée deux personnages
$perso1 = new Personnage;
$perso2 = new Personnage;
// Ensuite, on veut que le personnage n°1 frappe le personnage n°2.
$perso1->frapper($perso2);
Pour résumer :
- la méthode frapper() demande un argument : le personnage à frapper;
- cette méthode augmente les dégâts du personnage à frapper en fonction de la force du personnage qui frappe.
Ecrire la méthode frapper()
Commençons par écrire notre méthode frapper(). Cette méthode doit accepter un argument : le personnage à frapper. La méthode aura juste pour rôle d'augmenter les dégâts du personnage passé en paramètre.<?php
class Personnage {
private $_degats; // Les dégâts du personnage.
private $_experience; // L'expérience du personnage.
private $_force; // La force du personnage (plus elle est grande, plus l'attaque est puissante).
public function frapper($persoAFrapper) {
$persoAFrapper->_degats += $this->_force;
}
public function gagnerExperience() {
// On ajoute 1 à notre attribut $_experience.
$this->_experience = $this->_experience + 1;
}
}
Commentons ensemble le contenu de cette méthode frapper() :
- La première consiste à dire à PHP que l'on veut assigner une nouvelle valeur à l'attribut$_degatsdu personnage à frapper.
- La seconde partie consiste à donner à PHP la valeur que l'on veut assigner. Ici, nous voyons que cette valeur est atteinte par$this->_force.
L'instruction contenue dans la méthode signifie donc : "Ajoute la valeur de la force du personnage qui frappe à l'attribut $_degats du personnage frappé."
Combat entre personnages
Maintenant, nous pouvons créer une sorte de petite mise en scène qui fait interagir nos personnages. Par exemple, nous pouvons créer un script qui fait combattre les personnages. Le personnage 1 frapperait le personnage 2 puis gagnerait de l'expérience, puis le personnage 2 frapperait le personnage 1 et gagnerait de l'expérience. Procédez étape par étape :- créez deux personnages;
- faites frapper le personnage 1;
- faites gagner de l'expérience au personnage 1;
- faites frapper le personnage 2;
- faites gagner de l'expérience au personnage 2.
<?php
$perso1 = new Personnage; // Un premier personnage
$perso2 = new Personnage; // Un second personnage
$perso1->frapper($perso2); // $perso1 frappe $perso2
$perso1->gagnerExperience(); // $perso1 gagne de l'expérience
$perso2->frapper($perso1); // $perso2 frappe $perso1
$perso2->gagnerExperience(); // $perso2 gagne de l'expérience
Exiger des objets en paramètre
Reprenons l'exemple du code auquel nous sommes arrivés et concentrons-nous sur la méthode frapper(). Celle-ci accepte un argument : un personnage à frapper. Cependant, qu'est-ce qui vous garantit qu'on passe effectivement un personnage à frapper ? On pourrait très bien passer un argument complètement différent, comme un nombre par exemple :<?php
$perso = new Personnage;
$perso->frapper(42);
Si passage d'un nombre en paramètre: une erreur est générée. Il faut donc s'assurer que le paramètre passé est bien un personnage. Pour cela, il suffit d'ajouter un seul mot : le nom de la classe dont le paramètre doit être un objet. Dans notre cas, si le paramètre doit être un objet de type Personnage, alors il faudra ajouter le mot-clé Personnage, juste avant le nom du paramètre, comme ceci :
<?php
class Personnage{
// …
public function frapper(Personnage $persoAFrapper) {
// …
}
}