Fácil PHP
Interface Animal
Enunciado
Crie uma interface Animal com o método emitirSom(): string e uma constante REINO = 'Animalia'. Depois crie a classe Cachorro que a implementa, retornando 'Latido' no método. Exiba o som e a constante.
Requisitos
- A interface
Animaldeve ter o métodoemitirSome a constanteREINO. - A classe
Cachorrodeve usarimplements Animal. - O método
emitirSomdeve retornar a string'Latido'. - O programa deve imprimir o som e o valor da constante.
Código inicial
<?php
// Defina a interface Animal
// Defina a classe Cachorro
// Exiba o som e a constante
Saída esperada
Som: Latido
Reino: Animalia
Ver dica
Use public const REINO = 'Animalia'; dentro da interface e acesse com Animal::REINO.
Mostrar solução
<?php
interface Animal
{
public const REINO = 'Animalia';
public function emitirSom(): string;
}
class Cachorro implements Animal
{
public function emitirSom(): string
{
return 'Latido';
}
}
$cachorro = new Cachorro();
echo 'Som: ' . $cachorro->emitirSom() . PHP_EOL;
echo 'Reino: ' . Animal::REINO . PHP_EOL;
Passo a passo
- Declaramos a interface
Animalcominterface. Ela contém a constanteREINOe a assinatura do métodoemitirSom. - A classe
Cachorrousaimplements Animal, assumindo o compromisso de implementaremitirSom. - Dentro de
Cachorro, o métodoemitirSomretorna a string'Latido'. O: stringgarante o tipo de retorno. - Criamos um objeto
$cachorroe chamamosemitirSom(), imprimindo o resultado. - Acessamos a constante diretamente pela interface:
Animal::REINO.
Por que funciona
A interface define um contrato: qualquer classe que a implemente deve ter o método emitirSom. Isso permite que outras partes do código tratem Cachorro como Animal, sabendo que o método existe. A constante é um valor fixo associado ao conceito, acessível sem instanciar.
Erros comuns
- Esquecer de implementar o método: se
Cachorronão tiveremitirSom, o PHP emite erro fatalClass Cachorro contains 1 abstract method.... Solução: implemente todos os métodos da interface. - Tentar instanciar a interface:
new Animal()gera erro fatal. Interfaces não podem ser instanciadas. - Acessar constante como propriedade:
$cachorro->REINOnão funciona; useAnimal::REINO.
Outra forma de resolver
Implementar a interface em uma classe anônima:
$animal = new class implements Animal {
public function emitirSom(): string { return 'Latido'; }
};
echo $animal->emitirSom();
Útil para testes rápidos.
Saída esperada
Som: Latido
Reino: Animalia