Come abbiamo visto nei capitoli precedenti, una sottoclasse ha la possibilità di ridefinire i metodi della classe madre.
E’ possibile impedire la ridefinizione di determinati metodi e o la derivazione da determinate classi, usando la direttiva final.
Se quindi desiderate che non vengano fornite ulteriori implementazioni di un metodo della vostra classe, allora è sufficiente far precedere alla parola chiave function, la direttiva final in questo modo :
Metodo final
<?php
class ClasseBase
{
public $attributo;
public final function metodo()
{
echo "Sono un metodo finale!";
}
}
class SottoClasse extends ClasseBase
{
public function metodo() // Genera un errore fatale
{
echo "Proviamo a ridefinire il metodo finale!";
}
}
?>
Il codice soprastante genera il seguente errore poichè SottoClasse ha tentato di ridefinire un metodo finale di ClasseBase :
Fatal error: Cannot override final method ClasseBase::metodo()
Se invece volete impedire che una sottoclasse derivi da una classe specifica, applicate a quest’ultima la direttiva final seguita dalla parola chiave class e dal nome classe in questo modo :
Classe final
<?php
final class ClasseBase
{
public $attributo;
public function metodo()
{ /* ... */ }
}
class SottoClasse extends ClasseBase // Genera un errore fatale
{
/* ... */
}
?>
Il codice soprastante genera il seguente errore fatale :
Fatal error: Class SottoClasse may not inherit from final class (ClasseBase)
Versione originale dell’articolo
Lezione Precedente -> Guida Php – Esempio pratico per l’uso di Interfacce
Lezione Successiva -> Guida Php – Gestione degli Errori
