Interfaces de objetos
Las interfaces de objetos permiten que usted cree código especificando qué métodos debe implementar una clase, sin tener que definir cómo son manejados estos métodos.
Object interfaces allow you to create code which specifies which methods a class must implement, without having to define how these methods are handled.
Las interfaces se definen usando la palabra reservada
interface, de la misma manera que una clase estándar, pero sin que ninguno de sus métodos tenga definido su contenido. Las clases que implementan una interfaz deben hacerlo utilizando la palabra reservada
implements y debe definir todos los métodos listados en la interfaz. Si se desea, una clase puede implementar más de una interfaz listando las interfaces que implementa separadas por una coma.
Interfaces are defined using the interface keyword, in the same way as a standard class, but without any of the methods having their contents defined. Classes which implement an interface should do so using the implements keyword, and must have definitions for all the methods listed in the interface. Classes may implement more than one interface if desired by listing each interface split by a comma.
Todos los métodos declarados en una interfaz deben ser públicos. Ésta es la naturaleza de las interfaces.
All methods declared in an interface must be public, this is the nature of an interface.
Si se declara que una clase implementa una interfaz, pero no implementa todos sus métodos, se producirá un error fatal que informa qué métodos no han sido implementados.
Stating that a class implements an interface, and then not implementing all the methods in the interface will result in a fatal error telling you which methods have not been implemented. Ejemplo 19-17. Ejemplo de interfaces. Código PHP:
<?php
// Declaramos la Interfaz iTemplate
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// Implementamos la interfaz
// Esto funcionará
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
// Esto no funcionará
// Fatal error: La Clase BadTemplate contiene 1 método abstracto
// y debe ser también declarada como abstracta (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
}
?>