🚀 Capítulo 12: A Força das Interfaces (Tema: Star Wars)
NOTE
Este capítulo utiliza a temática de Star Wars para explicar as Interfaces e Traits em PHP. Aprenda a criar contratos e compartilhar códigos de forma inteligente!
1. 🎯 Objetivo da Aula
Compreender o conceito de Interfaces (contratos) e Traits (reutilização de código horizontal) em PHP, superando a limitação de herança única da linguagem.
2. 🏢 O Cenário Prático (Seu Desafio)
No universo de Star Wars, os cavaleiros Jedi e os Lordes Sith são arqui-inimigos, mas ambos compartilham uma habilidade fundamental: o uso da Força. Além disso, tanto um droide quanto uma nave estelar precisam ter um sistema de comunicação padrão para falar com a base. Para garantir que qualquer classe de “Guerreiro” saiba usar a força, ou que qualquer “Máquina” saiba se comunicar, nós criamos um padrão a ser seguido!
Na POO:
- Interface: É um contrato. Você diz quais métodos a classe DEVE ter, mas não diz como eles funcionam. Quem “assinar” o contrato (implementar a interface) é obrigado a criar esses métodos!
- Trait: É um pedaço de código que pode ser injetado dentro de qualquer classe, permitindo que classes de famílias diferentes usem as mesmas funções! Seu desafio é usar a Força!
🧠 Fundamentos: A Teoria Traduzida
📜 1. Interfaces (O Contrato):
Usamos a palavra interface. Ela só contém a assinatura dos métodos (sem o código dentro).
interface UsadorDaForca {
public function usarForca(); // Quem implementar é obrigado a criar essa função!
}
class Jedi implements UsadorDaForca {
public function usarForca() {
echo "Usando a força para o bem! ✨\n";
}
}🧬 2. Traits (Superpoderes Compartilhados):
Como o PHP não aceita herança múltipla (uma classe filha de duas mães), as Traits servem para compartilhar código entre classes que não são parentes.
trait SistemaDeVoo {
public function voar() {
echo "Decolando para o hiperespaço! 🚀\n";
}
}
class Nave {
use SistemaDeVoo; // Ganhou a função voar()!
}
class Droide {
use SistemaDeVoo; // Também ganhou a função voar()!
}4. 📖 Exemplo Guiado: O Sabre de Luz
Vamos criar uma interface para obrigar os guerreiros a terem um sabre de luz:
<?php
interface Guerreiro {
public function ligarSabre();
}
class Sith implements Guerreiro {
public function ligarSabre() {
echo "O sabre Vermelho está ligado! 🔴\n";
}
}
$vader = new Sith();
$vader->ligarSabre();
?>5. 🛠️ Prática Obrigatória 1: Assinando o Contrato
- Dada a interface
Autenticavelque exige o métodologin(), escreva a linha de código da classeUsuarioque implementa essa interface.
6. 🛠️ Prática Obrigatória 2: Usando Traits
- Qual é a palavra-chave que usamos dentro de uma classe (como visto no exemplo da Nave) para dizer que ela vai utilizar uma determinada
Trait?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 PHP_StarWars) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
spec_backend_com_php_e_laravel/
├── capitulos/
│ └── capitulo_12_star_wars.md💡 Checkpoint de Lógica
As interfaces servem para garantir que seu código seja padronizado. Se você criar uma função que espera receber um objeto do tipo UsadorDaForca, você poderá passar tanto um Jedi quanto um Sith para ela, e terá a certeza de que ambos possuem o método usarForca().
10. 🔥 Desafio de Fixação
Pesquise se uma classe em PHP pode implementar mais de uma interface ao mesmo tempo (Dica: pesquise por implements múltiplos).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
class Usuario implements Autenticavel {
// É obrigado a criar a função login() aqui dentro!
}Gabarito da Prática 2:
- Usamos a palavra-chave
useseguida do nome da Trait.