Menu
Coddy logo textTech

Introdução às Interfaces

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 27 de 91.

Uma interface define um contrato que as classes devem seguir. Diferentemente das classes abstratas, que podem conter métodos abstratos e concretos, uma interface apenas declara assinaturas de métodos sem nenhuma implementação. Pense nela como uma promessa: qualquer classe que implemente uma interface garante que fornecerá esses métodos específicos.

Você define uma interface usando a palavra-chave interface:

<?php
interface Printable {
    public function print();
}

Essa interface declara que qualquer classe que implemente Printable deve ter um método print(). A interface não se importa com o funcionamento do método, apenas com o fato de que ele existe.

Aqui está um exemplo simples mostrando a estrutura básica:

<?php
interface Drivable {
    public function start();
    public function stop();
}

Observe que os métodos de uma interface não têm corpo, apenas a assinatura terminando com ponto e vírgula. Todos os métodos de uma interface são implicitamente públicos, portanto você não pode usar private ou protected.

As interfaces são poderosas porque permitem que classes não relacionadas compartilhem um comportamento comum. Um Car e uma Motorcycle podem não ter nada em comum em termos de herança, mas ambos podem implementar Drivable para garantir que tenham os métodos start() e stop().

Ponto-chave: Uma interface define quais métodos uma classe deve ter, não como eles devem funcionar. Ela estabelece um contrato que as classes que a implementam devem cumprir.

challenge icon

Desafio

Fácil

Vamos criar um sistema simples de mensagens que apresentará a você as interfaces. Você definirá uma interface que estabelece um contrato sobre como as mensagens devem ser tratadas, criando a base para as classes que a implementarão na próxima lição.

Você organizará seu código em dois arquivos:

  • Messageable.php: Defina uma interface chamada Messageable que declare duas assinaturas de método: compose($content) para criar uma mensagem e deliver() para enviá-la. Lembre-se de que os métodos de uma interface não têm corpo, apenas a assinatura terminando com um ponto e vírgula.
  • main.php: Inclua o arquivo Messageable. Para verificar se sua interface está definida corretamente, use a função interface_exists() do PHP para verificar se Messageable existe. Em seguida, use ReflectionClass para inspecionar sua interface e listar seus métodos. Crie uma reflexão da sua interface, obtenha seus métodos usando getMethods() (que retorna objetos ReflectionMethod) e imprima o getName() de cada método em sua própria linha.

Sua saída deve exibir os dois nomes de método declarados pela sua interface, cada um em uma linha separada, na ordem em que você os definiu.

Este desafio se concentra exclusivamente na definição de uma interface: o contrato que as classes futuras precisarão cumprir. Você está estabelecendo quais métodos devem existir, sem se preocupar com como eles funcionarão. Essa implementação vem na próxima lição!

Experimente você mesmo

<?php
// Inclua o arquivo da interface Messageable
require_once 'Messageable.php';

// TODO: Use interface_exists() para verificar se a interface Messageable existe

// TODO: Crie um objeto ReflectionClass para a interface Messageable

// TODO: Obtenha os métodos usando getMethods()

// TODO: Percorra os métodos e imprima o nome de cada método em sua própria linha

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online