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
<?php
// 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);
