Alessio Mavica PHP & MySQL Developer, Project Leader & Scrum Master

12sep/110

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

¿Te gustó este artículo?

¡Suscríbete a nuestro feed RSS!

Comentarios (0) Trackbacks (0)

Aún no hay comentarios.


Leave a comment

(required)


dos × 9 =

Aún no hay trackbacks.