24. Classi e Metodi final

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)