Hasta ahora hemos visto que heredando una clase podemos sobreescribir métodos en una nueva implementación. Sin embargo, hay momentos donde queremos que determinados métodos no sean sobreescritos, para esto tenemos la palabra reservada final
<?php class Base { final public function test() { echo "Llamada a Base::test()<br />"; } } class Implementacion extends Base { public function test() { echo "Llamada a Implementacion::test()<br />"; } } // Devuelve un error Fatal: Fatal error: Cannot override final method Base::test() in test.php on line 12 ?>
Sí la clase es definida como final no se ésta no podrá ser extendida.
<?php final class Base { public function test() { echo "Llamada a Base::test()<br />"; } } class Implementacion extends Base { public function test() { echo "Llamada a Implementacion::test()<br />"; } } // Devuelve un error Fatal: Fatal error: Class Implementacion may not inherit from final class (Base) in test.php on line 12 ?>