informatique:programmation:php:poo
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| informatique:programmation:php:poo [2011/10/19 03:36] – benoit | informatique:programmation:php:poo [2011/10/19 18:22] (Version actuelle) – benoit | ||
|---|---|---|---|
| Ligne 319: | Ligne 319: | ||
| * L' | * L' | ||
| * L' | * L' | ||
| + | |||
| + | ===== Héritage ===== | ||
| + | ==== Déclaration de classes filles et portée des éléments ==== | ||
| + | <sxh php> | ||
| + | <?php | ||
| + | class ClasseMere | ||
| + | { | ||
| + | // Un attribut protected est un attributs pouvant être transmise | ||
| + | // L' | ||
| + | protected $attributProtege = ' | ||
| + | private $attributPrive = ' | ||
| + | public $attributPublic = ' | ||
| + | } | ||
| + | |||
| + | // Ceci est une classe qui hérite des attributs et méthode de ClasseMere | ||
| + | // Elle hérite des éléments public ou protected mais pas private | ||
| + | class ClasseFille extends ClasseMere | ||
| + | { | ||
| + | public function get() | ||
| + | { | ||
| + | // Ci dessous aucun problème d' | ||
| + | echo $this-> | ||
| + | // Ci dessous aucun problème d' | ||
| + | echo $this-> | ||
| + | // La directive ci-dessous génèrera une erreur car la classe fille ne peut pas hériter d' | ||
| + | echo $this-> | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // On peut créer autant de classes fille que l'on veut | ||
| + | class ClasseGarcon extends ClasseMere | ||
| + | { | ||
| + | } | ||
| + | |||
| + | // On peut créer une arborescence de classe (tous les éléments parents public ou protected seront hérétées) | ||
| + | class ClassePetiteFille extends ClasseFille | ||
| + | { | ||
| + | } | ||
| + | |||
| + | $truc1 = new ClasseMere; | ||
| + | $truc2 = new ClasseFille; | ||
| + | |||
| + | // Ici on lance notre méthode get qui affichera une erreur à cause de l' | ||
| + | $truc2-> | ||
| + | |||
| + | // | ||
| + | echo $truc2-> | ||
| + | //La directive ci-dessous génèrera une erreur car la classe fille ne peut pas hériter d' | ||
| + | echo $truc2-> | ||
| + | |||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | ==== Réécrire une méthode héritée ==== | ||
| + | <sxh php> | ||
| + | <?php | ||
| + | class A | ||
| + | { | ||
| + | public function test() | ||
| + | { | ||
| + | return " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class B extends A | ||
| + | { | ||
| + | public function test() | ||
| + | { | ||
| + | // Ici on dit que $retour est égale au resultat de la methode " | ||
| + | $retour = parent:: | ||
| + | return $retour." | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $trucA = new A; | ||
| + | $trucB = new B; | ||
| + | |||
| + | echo $trucA-> | ||
| + | echo " | ||
| + | echo $trucB-> | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | Resultat attendu : | ||
| + | test | ||
| + | test avec des chose en plus | ||
| + | |||
| + | ==== Imposer des contraintes ==== | ||
| + | Restreindre l' | ||
| + | <sxh php> | ||
| + | <?php | ||
| + | abstract class ClasseMere | ||
| + | { | ||
| + | } | ||
| + | | ||
| + | class ClasseFille extends ClasseMere | ||
| + | { | ||
| + | } | ||
| + | | ||
| + | $truc1 = new ClasseFille; | ||
| + | $truc2 = new ClasseMere; //En revanche il y a une restriction pour utiliser la classe ClasseMere. Une erreur aura lieu. | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | |||
| + | 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' | ||
| + | // Les classes Filles seront toutes obligées de réécrire le methode Afficher() | ||
| + | } | ||
| + | |||
| + | class ClasseFille extends ClasseMere | ||
| + | { | ||
| + | public function Afficher() | ||
| + | { | ||
| + | echo " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $truc = new ClasseFille; | ||
| + | $truc-> | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | Restreindre l' | ||
| + | |||
| + | <sxh php> | ||
| + | <?php | ||
| + | abstract class ClasseMere | ||
| + | { | ||
| + | // Ceci est une methode finale ne pouvent être héritée | ||
| + | final public function Methode() | ||
| + | { | ||
| + | echo " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // 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 " | ||
| + | public function Methode() | ||
| + | { | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Erreur fatale, car notre classe hérite d'une classe finale. | ||
| + | class ClassePetiteFille extends ClasseFille | ||
| + | { | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | ==== Résolution statique à la volée ==== | ||
| + | <sxh php> | ||
| + | <?php | ||
| + | class Mere | ||
| + | { | ||
| + | public static function lancerLeTest() | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | |||
| + | public function quiEstCe() | ||
| + | { | ||
| + | echo "Je suis la classe Mere !\n"; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class Enfant extends Mere | ||
| + | { | ||
| + | public function quiEstCe() | ||
| + | { | ||
| + | echo 'Je suis la classe Enfant !'; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Enfant:: | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | Résultat attendu : | ||
| + | Je suis la classe Mere ! | ||
| + | |||
| + | ==== Pour résumer ==== | ||
| + | * Avec l' | ||
| + | * **abstract** dans une classe empèche d' | ||
| + | * **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 " | ||
| + | * **parent:: | ||
informatique/programmation/php/poo.1318995375.txt.gz · Dernière modification : (modification externe)
