Interface é quando queremos estabelecer alguns padrões de comportamento e funcionamento para algumas de nossas classes, principalmente implementado em poliformismo, aonde temos que garantir que as classes que serão "geradas" ali tem que ter os mesmos métodos básicos.

Quando utilizar Interface?

No PHP, ainda vejo poucas pessoas utilizando interface, porém a tendência é que sua utilização aumente conforme os programadores evoluam, e a linguagem também.

A implementação de interface em um projeto deverá ser feita quando surgir a necessidade de padronizar ou garantir determinado comportamento em uma classe do sistema. Através de uma interface é possível controlar e utilizar uma navegação segura entre as classes, tendo certeza que determinados métodos estarão disponíveis quando necessário.

Como implementar interface em PHP?

Um exemplo clássico utilizado em salas de aula é a confusa explicação de veículos automotores, pois é, é assim mesmo que vamos explicar. Neste primeiro exemplo vamos estabelecer alguns comportamentos básicos para nossas classes Carro e Moto de forma que todas possuam os métodos ligar(), acelerar(), freiar() e estaLigado().

A interface
Código PHP:
<?php
interface AutoMotor {  
    public function 
ligar();  
    public function 
acelerar();  
    public function 
freiar();  
    public function 
estaLigado();  
}  
?>
Observe que não implementamos nenhum código especifico até o momento, o que ocorre é que a interface não implementa nenhum código ou ação, ela é utilizada apenas para definir que as classes que utilizarem aquela determinada interface sejam obrigadas a implementar os métodos ali descritos.

Classes que implementariam nossa interface

Vamos ver abaixo um código errado de como se implementa uma interface, demonstrando o erro abaixo:

Código:
Fatal error: Class Moto contains 3 abstract methods and must therefore be
declared abstract or implement the remaining methods
(AutoMotor::acelerar, AutoMotor::freiar, AutoMotor::estaLigado)
Veja que no erro ele já acusa quais métodos não foram impementados, impedindo inclusive que o código continue a ser executado sem que estes sejam implementados antes.

Código PHP:
<?php  
include("exemplo1.php");  
  
class 
Moto implements AutoMotor {  
  
    private 
$motorLigado false;  
  
    public function 
ligar() {  
        
$this->motorLigado true;  
    }  
}  
?>
No exemplo acima deixamos de implementar acelerar(), freiar() e estaLigado(), todos, métodos muito importantes para uma moto, não concordam? então abaixo deixamos uma implementação correta da classe.

Código PHP:
<?php  
include("exemplo1.php");  
  
class 
Moto implements AutoMotor {  
  
    private 
$motorLigado false;  
    private 
$velocidade 0;  
  
    public function 
ligar() {  
        
$this->motorLigado true;  
    }  
    public function 
desligar() {  
        
$this->motorLigado false;  
    }  
    public function 
acelerar() {  
        
$this->velocidade++;  
    }  
    public function 
freiar() {  
        
$this->velocidade--;  
    }  
    public function 
estaLigado() {  
        return 
$this->motorLigado;  
    }  
}  
?>
Interessante é ver como ficamos mais confiantes em programar, tendo certeza que nossos métodos bases foram implementados.

Fonte: OGENIAL