Interfaces de Objetos

Interfaces de Objetos permite a criação de código que especifica quais métodos e variáveis uma classe deve implementar, sem ter que definir como esses métodos serão tratados.

Interfaces são definidas usando a palavra-chave 'interface', da mesma maneira que uma classe comum, mas sem nenhum dos métodos ter seu conteúdo definido. Classes que implementam uma interface devem fazê-lo usando a palavra-chave 'interface', e devem ter definições para todos os métodos listados na interface. Classes podem implementar mais de uma interface se desejarem listando cada interface separada por um espaço.

Dizer que uma classe implementa uma interface e depois não implementar todos os métodos na interface resultará em um erro fatal dizendo quais métodos não foram implementados.

Exemplo 19-17. Exemplo de Interface

<?php
// Declara a interface 'iTemplate'
interface iTemplate
{
  
public function editarVariavel($nome, $var);
  
public function pegarHtml($template);
}

// Implementa a interface
// Isso vai funcionar
class Template implements iTemplate
{
  
private $vars = array();
  
  
public function editarVariavel($nome, $var)
  {
    
$this->vars[$nome] = $var;
  }
  
  
public function pegarHtml($template)
  {
    foreach(
$this->vars as $nome => $valor) {
      
$template = str_replace('{'.$nome.'}',$valor, $template);
    }
    
    return
$template;
  }
}

// Isso não vai funcionar
// Erro Fatal: Classe TemplateRuim contêm 1 método abstrato
// e deve, portanto, ser declareada abstrata (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    
private $vars = array();
  
    
public function editarVariavel($nome, $var)
    {
        
$this->vars[$nome] = $var;
    }
}

?>