Clases abstractas en PHP
En este artículo veremos que son las clases abstractas en PHP y luego veremos como utilizarlas.
¿Qué es una Clase Abstracta?
El siguiente es un pequeño extracto del libro FUNDAMENTOS DE PROGRAMACIÓN -Luis Joyanes Aguilar considero que él en su libro describe mucho mejor de lo que podría hacerlo yo con mis propias palabras.
Una clase abstracta es una clase que no tiene ningún objeto; o con mayor precisión, es una clase que no puede tener objetos instancias de la clase base.
Una clase abstracta describe atributos y comportamientos comunes a otras clases,y deja algunos aspectos del funcionamiento de la clase a las subclases concretas.
Imagina que quieres crear una clasificación general para todos los vehículos. Un «vehículo» es un concepto muy amplio que engloba desde coches y motos hasta barcos y aviones. Sin embargo, no puedes construir un «vehículo» en sí mismo, ya que es demasiado general.
En este caso, la clase «Vehículo» sería una clase abstracta. Define las características comunes que todos los vehículos comparten: tienen ruedas (o algo similar), un motor, pueden moverse, etc. Pero no especifica cómo se mueven, qué tipo de motor tienen o cuántas ruedas poseen.
Veamos un ejemplo de clase abstracta
Ejemplo de clase abstracta<?php abstract class ClaseAbstracta { // Forzar la extensión de clase para definir este método abstract protected function saludo($nombre); // Método común public function adios() { echo "adios"; } } class OtraClase extends ClaseAbstracta { protected function saludo($nombre){ return "hola $nombre<br/>"; } public function saludar($nombre){ echo $this->saludo($nombre); } } $a = new OtraClase(); $a->saludar("Raul"); $a->adios();<?php abstract class ClaseAbstracta { // Forzar la extensión de clase para definir este método abstract protected function saludo($nombre); // Método común public function adios() { echo "adios"; } } class OtraClase extends ClaseAbstracta { protected function saludo($nombre){ return "hola $nombre<br/>"; } public function saludar($nombre){ echo $this->saludo($nombre); } } $a = new OtraClase(); $a->saludar("Raul"); $a->adios();
hola Raul adios
Las clases definidas como abstractas no pueden ser inicializadas
Todos los métodos marcados como abstract(abstractos) en la clase padre deben ser declarados en la clase hijo
¿Por qué usamos clases abstractas?
- Jerarquía: Establecen una jerarquía de clases, donde las clases más específicas heredan las características de la clase abstracta.
- Reutilización de código: Evita repetir código al definir las características comunes en cada clase concreta.
- Polimorfismo: Permiten que objetos de diferentes clases se traten de la misma manera, gracias a la herencia.
Diferencias con Interfaces y clases abstractas en PHP
¿No habíamos visto algo parecido llamado interfaz?
Pero parecidos no es igual, aunque la sintaxis sea parecida, estas se comportan muy diferentes, mientras una interfaz nos permite decirle a una clase que métodos deben ser implementados, una clase abstracta es como una clase parcialmente echa o una clase a medio hacer.
Si lo quieres ver de cierta manera puedes verlo como si la clase abstracta fuera un formulario con campos hechos y campos que debes rellenar.
Puedes utilizar una clase abstracta implementando una interfaz.