PHP Altruisas Ocio Eventos Cursos Las Palmas
/

Las clases finales en la Programación Orientada a Objetos en PHP

Dentro Programación Orientada a Objeto (POO) se define como clases finales o métodos finales aquellas que no van a permitir el legado puesto que no se puede heredar de ellas. También, una clase final no puede tener una subclase.

Para definir una clase final únicamente tendremos que poner la palabra reservada ‘final’ antes de la definición de la clase o método. Veamos este primer ejemplo en el que se programa una clase final en PHP y posteriormente se intenta modificar un método final a través de una subclase.

Definición de una superclase con un método final


<?php
class superclase {
   final public function métodoFinal () {
      echo 'Método final en la superclase';
   }
}?>

Definición de una subclase que hereda de la superclase


<?php
class subclase extends superclase {
   //intento de modificación de la clase final.
   public function metodoFinal () {
      echo 'Método final en la subclase';
   }
}?>

Ya dijimos que que la clase ‘superclase’ tiene un método que se ha declarado como final y en la subclase se hace una modificación del mismo. Este hecho hace que el resultado obtenido se convierta en error fatal.

El mensaje que puede leerse en el fichero error.log del servidor Apache es el siguiente:

[Tue Jun 16 15:45:25.669827 2020] [php7:error] [pid 11279] [client XX.XX.XXX.XXX:56329] PHP Fatal error: Cannot override final method superclase::metodoFinal() in /ejemplos/clases_finales.php on line 9

De la misma forma, el propio editor, Visual Code Version: 1.45.1, también nos advierte del error que estamos cometiendo en nuestro código.

Error Override Final Method Ocio Las Palmas Altruistas

Segundo ejemplo

Definición de una superclase


<?php 
final class superclase { 
   public $x;
   } 
}?>

Intento de definición de una subclase que hereda de la superclase


<?php 
class subclase extends superclase { 
   public $y; 
}?>

El resultado que se obtiene del intento de ejecutar los dos script anteriores (unidos) da como resultado un nuevo error fatal. Como comentamos anteriormente, no se puede heredar de una clase final, es decir, no puede tener subclase.

Deja una respuesta