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édentesRévision précédente
Prochaine révision
Révision précédente
informatique:programmation:php:poo [2011/10/19 17:23] – benoitinformatique:programmation:php:poo [2011/10/19 18:22] (Version actuelle) – benoit
Ligne 379: Ligne 379:
     public function test()     public function test()
     {     {
-      return "test\n";+      return "test";
     }     }
   }   }
-  +
   class B extends A   class B extends A
   {   {
Ligne 389: Ligne 389:
       // Ici on dit que $retour est égale au resultat de la methode "test" de la classe parente       // Ici on dit que $retour est égale au resultat de la methode "test" de la classe parente
       $retour = parent::test();       $retour = parent::test();
-      return $retour;+      return $retour." avec des chose en plus\n";
     }     }
   }   }
-  +
   $trucA = new A;   $trucA = new A;
   $trucB = new B;   $trucB = new B;
-  +
   echo $trucA->test();   echo $trucA->test();
-  // En executant le méthode hérité, test s'affichera+  echo "\n";
   echo $trucB->test();   echo $trucB->test();
   ?>   ?>
Ligne 404: Ligne 404:
 Resultat attendu : Resultat attendu :
   test   test
-  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.1319044993.txt.gz · Dernière modification : (modification externe)