Les classes finales et les méthodes finales en PHP

Le mot-clé final est utilisé en PHP pour les méthodes et les classes. Le mot-clé final pour les méthodes empêche la surcharge des méthodes, alors que le mot-clé final pour les classes empêche l’héritage.
 

Méthode finale

On ne peut pas surcharger la méthode de la classe mère.

<?php
   class MathClass{
      final function calculer($a, $b){
         $somme = $a + $b;
         echo "La somme de $a et $b est =".$somme;
      }
   }
	  
   class School extends MathClass{
      function calculer($x, $y){
         $prod = $x * $y;
         echo "le produit de $x et $y est =".$prod;
      }
   }
   
   $obj= new School();
   $obj->calculer(2,4);
?>

La sortie :

Fatal error:  Cannot override final method MathClass::calculer()

Dans l’exemple ci-dessus, la classe MathClass qui est la classe mère. Dans laquelle la méthode calculer est marquée comme finale. Cela implique que nous ne pouvons pas surcharger la méthode calculer dans aucune de ses classes filles. Pour identifier l’erreur, la classe fille School tente de définir la méthode calculer(). Cela produira une erreur fatale, cela implique que la méthode finale de la classe mère ne peut pas être définie dans sa classe fille.
 
 

Classe finale

Une classe fille ne peut pas hériter une classe mère déclarée final.

<?php
   final Class A{
      function show(){
         echo "Welcome to WayToLearnX.com";
      }
   }
   
   class B extends A{
      function show(){
         echo "Hello World!";
      }
   }
   
   $b= new B();
   $b->show();
?>

La sortie :

Fatal error : Class B may not inherit from final class (A)

Dans l’exemple ci-dessus la classe A est définit avec le mot-clé final. Lorsque la classe B essaie d’hériter la classe mère A, PHP lève un message d’erreur qui dit : « La classe B ne peut pas hériter de la classe finale (A) », ce qui implique qu’il ne permet pas de créer une classe fille à partir de la classe mère.
 
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *