Interface vs. Abstract class en PHP
Interface y Abrastract class son conceptos de la OOP poco usados en PHP. Los motivos son principalmente dos:
- requisitos poco claros (o idas poco claras por parte del desarrollador) en la fase de diseño
- poco conocimiento de estos conceptos
Entonces intentamos aclararlos.
QUÈ ES UNA INTERFAZ
La definición más clara es que una interfaz es un contrato.
Características:
- todas las clases que implementan una interfaz tienen que desarrollar todos los métodos que han sido definidos
- por cada método se define sólo la firma
- los métodos pueden ser solo públicos
- una clase puede implementar más de una interfaz
- una interfaz puede ser utilizada por el Type Hinting
interface logsInterface
{
public function log($message, $priority = null);
}
QUÉ ES UNA CLASE ABSTRACTA
Es una clase "padre" que tiene que ser heredada para poder ser utilizada. Las clases que la heredan se diferencian entre ellas solo en los métodos abstractos y pueden acceder a los métodos de la clase padre utilizando la keyword parent.
Características:
- no se puede instanciar
- los métodos pueden ser abstractos (no implementados)
- los métodos pueden ser no abstractos (implementados)
- un clase puede heredar de una sóla clase abstracta
abstract class logsAbstract
{
private $variable;
abstract public function logMethod();
public function getVariable()
{
return $this->variable;
}
}
RESUMEN DE INTERFACE VS ABSTRACT CLASS
| Abstract Class | Interface |
| Un método que no viene implementado se tiene que definir abstract | No es posible implementar métodos sino solo definir su firma |
| Un método abstract se puede definir public, protected o private. Las subclases que heredan de la clase padre tienen que implementar estos métodos con la misma visibilidad o menor | Todos los métodos son públicos |
| Puede contener variables y constantes | Puede contener solo constantes |
| Una clase puede heredar solo una clase padre | Una clase puede implementar más de una interfaz |
| Una clase hija puede o no sobrescribir (override) un método definido en la clase padre | Una clase que implementa una interfaz tiene que sobrescribir todos los métodos de la interfaz |
En principio si una clase abstracta contiene sólo métodos abstractos la estamos utilizando como una interfaz.
CONCLUSIONES
Las clases abstractas se utilizan para compartir funciones.
Las interfaces se utilizan para compartir como se tiene que hacer algo.
LINKS
- Why are interfaces widely ignored in the PHP world and what use do they have when working with symfony?
- Difference between abstract classes and interfaces
- Ejemplo de interface y abstract class
¿Te gustó este artículo?
Aún no hay trackbacks.