25. Clases abstractas en PHP

Cuando creamos interfaces, debemos definir todos los métodos que coloquemos dentro como métodos públicos, pero no se pueden utilizar métodos protegidos, por lo que para estos casos no vamos a poder utilizar interfaces. Para ello nos van a ayudar lo que se denominan clases abstractas. Se comportan de una manera similar a las interfaces pero permiten definir los métodos como protegidos o permiten poder extendernos en la funcionalidad de algún método.

La clase abstracta se crea de igual manera que las clases, sólo que anteponiendo la palabra reservada abstract delante de la palabra class. Igualmente, a todos los métodos que incluyamos les tenemos que anteponer la palabra reservada abstract.

Cuando definimos una clase abstracta, no podemos instanciar esta clase, las clases abstractas sólo sirven para que pueda ser extendida desde otra clase.

Ejm

  // Creación de una clase abstracta
  abstract class ClaseAbstracta {
    abstract protected function getValor();
    abstract public function valorPrefijo($prefijo);

    public function imprimir(){
      echo $this->getValor();
    }
  }

  class ClaseConcreta extends ClaseAbstracta {
    protected function getValor(){
      return "Clase concreta";
    }

    public function valorPrefijo($prefijo, $separador = "."){
      return $prefijo . "Clase concreta";
    }
  }

  $clase1 = new ClaseConcreta;
  $clase1->imprimir();
  echo "<br />";
  echo $clase1->valorPrefijo(1);

 

Interfaz VS clase abstracta

La interfaz sólo permite dejar pautas de qué métodos deben llevar las clases que la implementen, pero no pueden desarrollar ninguno de los métodos, mientras que las clases abstractas sí pueden desarrollar los métodos. Cuando trabajamos con interfaces sólo podemos definir métodos públicos mientras que con las clases abstractas podemos definir tanto métodos públicos como protegidos.