Ci-dessous, les différences entre deux révisions de la page.
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:51] benoit |
informatique:programmation:php:poo [2018/09/06 19:10] (Version actuelle) |
||
---|---|---|---|
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 ==== | ||
- | Fixer des restrictions d'utilisation Classe filles. | + | Restreindre l'utilisation d'une classe qu'aux classes filles. |
<sxh php> | <sxh php> | ||
<?php | <?php | ||
Ligne 448: | Ligne 448: | ||
</sxh> | </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 |