Classes e Objetos
PHP Manual

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.

Todos os métodos declarados em uma interface devem ser public, essa é a natureza de uma interface.

implements

Para implementar uma interface, o operador implements é usado. Todos os métodos na interface devem ser implementados na classe; não fazer isso resultará em um erro fatal. Classes podem implementar mais de uma interface se assim for desejado, separando cada interface com uma vírgula.

Nota:

Uma classe não pode implementar duas interfaces que compartilham o mesmo nome uma vez que isso causaria ambigüidade.

Nota:

Interfaces podem ser estendidas como classes, usando o operador extends.

Constants

É possível as interfaces terem constantes. Constantes de interfaces funcionam exatamente como class constants. Elas não podem ser sobrescritas por uma classe/interface que a herda.

Exemplos

Exemplo #1 Exemplo de Interface

<?php

// Declara a interface 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implementa a interface
// Isso 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;
    }
}

// Isso NÃO funcionará
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Exemplo #2 Interfaces estendíveis

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}

// Isto irá funcionar
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Isto não irá funcionar e resultará em um erro fatal
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Exemplo #3 Interface com herança múltipla

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Exemplo #4 Interfaces com constantes

<?php
interface a
{
    const 
'Interface constant';
}

// Imprime: Interface constant
echo a::b;


// Isto não funcionará porque não é permitido
// sobreescrever constantes. É o mesmo conceito como
// constantes de classes
class implements a
{
    const 
'Class constant';
}
?>

Veja também o operador instanceof.


Classes e Objetos
PHP Manual