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 Animal deve ter o método emitirSom e a constante REINO.
  • A classe Cachorro deve usar implements Animal.
  • O método emitirSom deve 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

  1. Declaramos a interface Animal com interface. Ela contém a constante REINO e a assinatura do método emitirSom.
  2. A classe Cachorro usa implements Animal, assumindo o compromisso de implementar emitirSom.
  3. Dentro de Cachorro, o método emitirSom retorna a string 'Latido'. O : string garante o tipo de retorno.
  4. Criamos um objeto $cachorro e chamamos emitirSom(), imprimindo o resultado.
  5. 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 Cachorro não tiver emitirSom, o PHP emite erro fatal Class 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->REINO não funciona; use Animal::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