Easy-Micro

LANGAGE POO PHP Part 1
Héritage

La programmation orientée objet en PHP

L'héritage

Quand on parle d'héritage, c'est qu'on dit qu'une classe B hérite d'une classe A. La classe A est donc considérée comme la classe mère et la classe B est considérée comme la classe fille.

Pour procéder à un héritage (c'est-à-dire faire en sorte qu'une classe hérite des attributs et méthodes d'une autre classe), il suffit d'utiliser le mot-clé extends

<?php
class Personnage {

}

// Toutes les classes suivantes hériteront de Personnage
class Magicien extends Personnage {

}

class Guerrier extends Personnage {

}

class Brute extends Personnage {

}

Chaque classe peut créer des attributs et méthodes qui lui seront propres, et c'est là toute la puissance de l'héritage

<?php
class Magicien extends Personnage {
  private $_magie; // Indique la puissance du magicien sur 100, sa capacité à produire de la magie
  
  public function lancerUnSort($perso) {
    $perso->recevoirDegats($this->_magie); // On va dire que la magie du magicien représente sa force
  }
}
Ainsi, la classe Magicien aura, en plus des attributs et méthodes hérités, un attribut $magie et une méthode lancerUnSort

Redéfinir les méthodes

Pour réécrire certaines méthodes, afin de modifier leur comportement, il vous suffit de déclarer à nouveau la méthode et d'écrire ce que bon vous semble à l'intérieur.

Par contre, si vous voulez accéder à un attribut de la classe parente pour le modifier, vous ne pourrez pas car notre classe fille n'a pas accès aux attributs de sa classe mère puisqu'ils sont tous privés. Il faut utiliser le mot-clé "parent" suivi du symbole double deux points, suivi lui-même du nom de la méthode à appeler.

<?php
class Magicien extends Personnage {
  private $_magie; // Indique la puissance du magicien sur 100, sa capacité à produire de la magie.
  
  public function lancerUnSort($perso) {
    $perso->recevoirDegats($this->_magie); // On va dire que la magie du magicien représente sa force.
  }
  
  public function gagnerExperience() {
    // On appelle la méthode gagnerExperience() de la classe parente
    parent::gagnerExperience();
    
    if ($this->_magie < 100) {
      $this->_magie += 10;
    }
  }
}

Type de visibilité : protected

Le type de visibilité protected est en fait une petite modification du type private : il a exactement les mêmes effets que private, à l'exception que toute classe fille aura accès aux éléments protégés. De manière générale, je vous conseille donc de toujours mettre protected au lieu de private

Classe abstraite : Imposer des contraintes

Pour empêcher quiconque d'instancier une classe, il suffit de faire précéder le mot-clé class du mot-clé abstract comme ceci

<?php
// Notre classe Personnage est abstraite
abstract class Personnage {

}

// Création d'une classe Magicien héritant de la classe Personnage.
class Magicien extends Personnage {

}

$magicien = new Magicien; // Tout va bien, la classe Magicien n'est pas abstraite.
$perso = new Personnage; // Erreur fatale car on instancie une classe abstraite.

Classe finale

Le concept des classes et méthodes finales est exactement l'inverse du concept d'abstraction. Si une classe est finale, vous ne pourrez pas créer de classe fille héritant de cette classe. Pour déclarer une classe finale, vous devez placer le mot-clé final juste avant le mot-clé class, comme abstract.

« Prev - POO PHP - Next »


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