09
Al contrario que las clases abstract, que proporcionan un medio para expresar conceptos abstractos en programación, las interfaces se han diseñado para asegurar la funcionalidad dentro de una clase. Específicamente, las interfaces son medios para definir el conjunto de métodos que debe tener una clase para implantar dicha interfaz. Para utilizar las interfaces, deben declararse con la palabra clave interface.
interface printable
{
public function printme();
}
Las interfaces, para ser útiles, deben implantarse mediante una o más clases. En el ejemplo hemos definido la interfaz printable, que estipula que cualquier clase que implante una interfaz el método printme(). Para crear una clase que implante una interfaz como ésta, utilizamos la palabra clave implements en la definición de clase, seguida por una lista de interfaces implantadas.
class Integer implements printable
{
private $value;
public function getValue(){
return (int) $this->value;
}
public function printme(){
echo (int) $this->value;
}
}
Hemos modificado la clase Integer original del entrada anterior para implantar la interfaz printable definida en el primer ejemplo. Como clase que implanta esta interfaz, se asegura efectivamente que la clase Integer va a proporcionar los métodos definidos por la interfaz.
Ahora que hemos definido una clase que implanta una interfaz, podemos utilizar este hecho dentro de nuestro código para asegurarnos de que cualquier función o método que requiera determinada funcionalidad de una clase la tendrá disponible desde la clase sin comprobar el nombre de clase específica utilizando la indicación de tipo o el operador instanceof. En su lugar, podemos utilizar estas técnicas para especificar la interfaz printable como muestra el siguiente ejemplo.
interface printable
{
public function printme();
}
abstract class Number
{
private $value;
abstract public function value();
public function reset(){
$this->value = NULL;
}
}
class Integer extends Number implements printable
{
private $value;
function __construct($value){
$this->value = $value;
}
public function getValue(){
return (int) $this->value;
}
public function printme(){
echo (int) $this->value;
}
}
/* Creamos una funcion que requiera de la interfaz printable*/
function printNumber(printable $myObject){
/* Si se llama a esta funcion, podemos estar seguros de que tiene un método printme()*/
$myObject->printme();
}
$inst = new Integer(10);
printNumber($inst);
Hemos utilizado las interfaces para asegurarnos de que la función printNumber() siempre va a recibir un objeto que tiene un método printme().




