Easy-Micro

LANGAGE POO PHP Part 1
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;
  }
}
Classe de base
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.
Maintenant, grosse question : la variable $this fait-elle référence au personnage qui frappe ou au personnage frappé ? Pour répondre à cette question, il faut savoir sur quel objet est appelée la méthode. En effet, souvenez-vous que $this est une variable représentant l'objet à partir duquel on a appelé la méthode. Dans notre cas, on a appelé la méthode frapper() à partir du personnage qui frappe, donc $this représente le personnage qui frappe.

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.

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) {
    // …
  }
}
Ajout du mot-clé Personnage, juste avant le nom du paramètre afin que la méthode frapper() ne soit exécutée que si le paramètre passé est de type Personnage

« Prev - POO PHP - Next »


< Page précédente POO PHP PART 1 Page suivante >