PHP Mot-clé final


Exemple

Def: le mot-clé final empêche les classes enfant de remplacer une méthode en préfixant la définition avec final. Si la classe elle-même est définie comme définitive, elle ne peut pas être étendue

Méthode finale

class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()

Classe finale:

final class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }

   // Here it doesn't matter if you specify the function as final or not
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
}
// Results in Fatal error: Class ChildClass may not inherit from final class (BaseClass)

Constantes finales: Contrairement à Java, le mot clé final n'est pas utilisé pour les constantes de classe en PHP. Utilisez le mot-clé const place.

Pourquoi dois-je utiliser la final ?

  1. Prévenir la chaîne de transmission de l'héritage massif
  2. Composition encourageante
  3. Forcer le développeur à réfléchir à l'API publique utilisateur
  4. Forcer le développeur à réduire l'API publique d'un objet
  5. Un final cours peut toujours être rendu extensible
  6. extends encapsulation des pauses
  7. Vous n'avez pas besoin de cette flexibilité
  8. Vous êtes libre de changer le code

Quand éviter la final : Les classes finales ne fonctionnent efficacement que sous les hypothèses suivantes:

  1. Il y a une abstraction (interface) que la classe finale implémente
  2. Toutes les API publiques de la classe finale font partie de cette interface