Menu
Coddy logo textTech

Introdução a 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. Ao contrário de classes abstratas que podem conter tanto métodos abstratos quanto concretos, uma interface apenas declara assinaturas de métodos sem qualquer implementação. Pense nisso como uma promessa: qualquer classe que implementa 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();
}

Esta interface declara que qualquer classe que implemente Printable deve ter um método print(). A interface não se importa com a forma como o método funciona, apenas que ele exista.

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 interface não possuem corpo, apenas a assinatura terminando com um ponto e vírgula. Todos os métodos em uma interface são implicitamente públicos, então você não pode usar private ou protected.

Interfaces são poderosas porque permitem que classes não relacionadas compartilhem comportamentos comuns. 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 possuam 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 implementadoras devem cumprir.

challenge icon

Desafio

Fácil

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

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

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

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

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

Folha de consulta

Uma interface define um contrato que as classes devem seguir. Ela apenas declara assinaturas de métodos sem qualquer implementação.

Defina uma interface usando a palavra-chave interface:

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

Métodos de interface não possuem corpo, apenas a assinatura terminando com um ponto e vírgula. Todos os métodos em uma interface são implicitamente públicos.

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

Interfaces permitem que classes não relacionadas compartilhem comportamentos comuns, garantindo que elas implementem métodos específicos.

Experimente você mesmo

<?php
// Inclui 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