Outils pour utilisateurs

Outils du site


informatique:programmation:php:poo

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
informatique:programmation:php:poo [2011/10/19 19:02]
benoit
informatique:programmation:php:poo [2018/09/06 19:10] (Version actuelle)
Ligne 373: Ligne 373:
  
 ==== Réécrire une méthode héritée ==== ==== Réécrire une méthode héritée ====
 +<sxh php>
 +  <?php
 +  class A
 +  {
 +    public function test()
 +    {
 +      return "​test";​
 +    }
 +  }
  
 +  class B extends A
 +  {
 +    public function test()
 +    {
 +      // Ici on dit que $retour est égale au resultat de la methode "​test"​ de la classe parente
 +      $retour = parent::​test();​
 +      return $retour."​ avec des chose en plus\n";​
 +    }
 +  }
 +
 +  $trucA = new A;
 +  $trucB = new B;
 +
 +  echo $trucA->​test();​
 +  echo "​\n";​
 +  echo $trucB->​test();​
 +  ?>
 +</​sxh>​
 +
 +Resultat attendu :
 +  test
 +  test avec des chose en plus
  
 ==== Imposer des contraintes ==== ==== Imposer des contraintes ====
 +Restreindre l'​utilisation d'une classe qu'aux classes filles.
 +<sxh php>
 +  <?php
 +  abstract class ClasseMere
 +  {
 +  }
 +  ​
 +  class ClasseFille extends ClasseMere
 +  {
 +  }
 +  ​
 +  $truc1 = new ClasseFille;​ //Aucun problème pour utiliser la classe ClasseFille
 +  $truc2 = new ClasseMere; //En revanche il y a une restriction pour utiliser la classe ClasseMere. Une erreur aura lieu.
 +  ?>
 +</​sxh>​
 +
 +
 +Obliger les classes filles à réécrire certaines méthodes de la classe parente.
 +<sxh php>
 +  <?php
 +  abstract class ClasseMere
 +  {
 +    //Pour définir une méthode comme étant abstraite, il faut que la classe elle-même soit abstraite !
 +    abstract public function Afficher();
 +    // Il n'y a pas d'​instruction dans cette methode, Elle ne peut pas en contenir
 +    // Les classes Filles seront toutes obligées de réécrire le methode Afficher()
 +  }
 +
 +  class ClasseFille extends ClasseMere
 +  {
 +    public function Afficher()
 +    {
 +      echo "​Methode obligatoirement ecrite dans la classe fille\n";​
 +    }
 +  }
 +
 +  $truc = new ClasseFille;​
 +  $truc->​Afficher();​
 +  ?>
 +</​sxh>​
 +
 +Restreindre l'​héritage d'une classe (classe finale ne pouvant être héritée) et la empêcher réécriture d'une methode. ​
 +
 +<sxh php>
 +  <?php
 +  abstract class ClasseMere
 +  {
 +    // Ceci est une methode finale ne pouvent être héritée
 +    final public function Methode()
 +    {
 +      echo "​Hello\n";​
 +    }
 +  }
 +
 +  // Cette classe est déclarée comme finale, aucun classe ne peut en hériter
 +  final class ClasseFille extends ClasseMere
 +  {
 +    // Erreur fatale, car le methode "​Methode"​ était déclarée comme final dans la classe parente.
 +    public function Methode()
 +    {
 +    }
 +  }
 +
 +  // Erreur fatale, car notre classe hérite d'une classe finale.
 +  class ClassePetiteFille extends ClasseFille
 +  {
 +  }
 +  ?>
 +</​sxh>​
 +
 +==== Résolution statique à la volée ====
 +<sxh php>
 +  <?php
 +  class Mere
 +  {
 +    public static function lancerLeTest()
 +    {
 +       ​self::​quiEstCe();​
 +    }
 +
 +    public function quiEstCe()
 +    {
 +      echo "Je suis la classe Mere !\n";
 +    }
 +  }
 +
 +  class Enfant extends Mere
 +  {
 +    public function quiEstCe()
 +    {
 +       echo 'Je suis la classe Enfant !';
 +    }
 +  }
 +
 +  Enfant::​lancerLeTest();​
 +  ?>
 +</​sxh>​
 +
 +Résultat attendu :
 +  Je suis la classe Mere !
 +
 +==== Pour résumer ====
 +  * Avec l'​attribut **protected** il est possible de permettre au classe fille d'​utiliser l'​attribut contrairement à l'​attribut **private**
 +  * **abstract** dans une classe empèche d'​utiliser cette classe en dehors d'une classe fille
 +  * **abstract** dans une méthode oblige les classes filles à réécrire la méthode.
 +  * **final** permet de déclarer une méthode ou classe comme non "​héritable"​
 +  * **parent::​methode()** permet de reprendre les éléments d'une methode parente y ajouter modifier des éléments
informatique/programmation/php/poo.1319043764.txt.gz · Dernière modification: 2018/09/06 19:00 (modification externe)