Fácil PHP

Enum puro para status de pedido

Enunciado

Crie um enum puro chamado StatusPedido com os casos Pendente, Pago, Enviado e Entregue. Adicione um método mensagem() que retorna uma string descrevendo o status. Depois, instancie um caso e exiba sua mensagem.

Requisitos

  • Definir enum puro StatusPedido com os quatro casos exatos.
  • Implementar método mensagem(): string que retorna uma descrição para cada caso.
  • Criar uma variável com um caso e imprimir name e mensagem().

Código inicial

<?php

// Defina o enum StatusPedido aqui

// Crie uma instância e exiba a mensagem

Saída esperada

Pendente: Aguardando pagamento
Ver dica

Use match($this) dentro do método para retornar a mensagem correta para cada caso.

Mostrar solução
<?php

// Enum puro representando o status de um pedido
enum StatusPedido {
    case Pendente;
    case Pago;
    case Enviado;
    case Entregue;

    // Método que retorna uma mensagem descritiva
    public function mensagem(): string {
        return match($this) {
            self::Pendente => 'Aguardando pagamento',
            self::Pago => 'Pagamento confirmado',
            self::Enviado => 'Pedido enviado',
            self::Entregue => 'Pedido entregue',
        };
    }
}

// Cria um caso e exibe a mensagem
$status = StatusPedido::Pendente;
echo $status->name . ': ' . $status->mensagem() . PHP_EOL;

Passo a passo

  1. Declaramos o enum puro StatusPedido com a palavra-chave enum e listamos os casos.
  2. Dentro do enum, definimos o método mensagem() que usa match($this) para comparar o caso atual.
  3. Cada braço do match retorna a string correspondente ao status.
  4. Fora do enum, criamos a variável $status com o caso Pendente.
  5. Imprimimos o nome do caso ($status->name) e a mensagem ($status->mensagem()).

Por que funciona

Enums puros são objetos únicos e cada caso é uma instância da classe enum. O método mensagem() pode acessar $this (o caso atual) e usar match para retornar o valor adequado. A propriedade name está disponível em qualquer enum e retorna o nome do caso como string.

Erros comuns

  • Esquecer de usar $this no match: match($status) causaria erro pois $status não está definido dentro do método.
  • Não cobrir todos os casos no match: o PHP lançará \UnhandledMatchError se um caso não for tratado.
  • Usar ->value em enum puro: enums puros não têm propriedade value; isso gera erro.

Outra forma de resolver

Poderia usar switch em vez de match, mas match é mais conciso e seguro. Exemplo:

switch ($this) {
    case self::Pendente: return 'Aguardando pagamento';
    // ...
}

Saída esperada

Pendente: Aguardando pagamento