Enums em PHP: como usar enumerações com exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Enums em PHP: do caos à ordem

\n\n

Você já escreveu código onde o status do pedido é armazenado como string 'new', 'paid', 'shipped'? E depois pegou bugs por causa de um erro de digitação 'shippped'? Ou passou para a função getOrderByStatus('Active'), mas ela esperava 'active'? Familiar? Então este artigo é para você.

\n\n

Por muito tempo, o PHP não tinha enumerações nativas (enums). Os desenvolvedores se viravam: usavam constantes de classe, arrays, até comentários fictícios. Mas com o lançamento do PHP 8.1, tudo mudou. Agora temos enumerações PHP completas — uma ferramenta poderosa que torna o código mais limpo, seguro e compreensível.

\n\n

Neste guia, vamos abordar enums PHP de A a Z: desde a sintaxe básica até técnicas avançadas. Você aprenderá como criar enumerações, trabalhar com elas, compará-las e usá-las em projetos reais. Vamos lá!

\n\n

O que é Enum no PHP?

\n\n

Enum (enumeration) é um tipo de dado que é limitado a um conjunto de valores predefinidos. Em palavras simples: você define uma lista de opções possíveis, e a variável só pode assumir uma delas. Sem strings aleatórias, sem valores não verificados.

\n\n

No PHP 8.1, as enumerações são implementadas como classes especiais. Cada valor é um objeto, não apenas uma constante. Isso traz muitas vantagens:

\n\n
    \n
  • Tipagem forte — o compilador não deixará passar 'pending' em vez de Status::Pending
  • \n
  • Segurança — sem erros de digitação acidentais
  • \n
  • Legibilidade — o código fala por si só
  • \n
  • Suporte a IDE — o autocompletar funciona perfeitamente
  • \n
\n\n

Sintaxe de Enum no PHP

\n\n

Criar uma enumeração no PHP é simples. Use a palavra-chave enum:

\n\n
<?php\n\nenum OrderStatus\n{\n    case New;\n    case Pending;\n    case Processing;\n    case Shipped;\n    case Delivered;\n    case Cancelled;\n}\n
\n\n

Agora podemos usar OrderStatus como tipo:

\n\n
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n    // Processamento do status\n}\n\n// Passando o valor:\nupdateOrderStatus(OrderStatus::Shipped);\n
\n\n

Tente passar a string 'shipped' — o PHP emitirá um erro de tipo. Essa é a mágica do enum no PHP.

\n\n

Enum com backing (Backed Enums)

\n\n

Frequentemente, precisamos associar cada caso a um valor específico — por exemplo, um número ou string para o banco de dados. No PHP, isso é chamado de backed enum:

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n}\n
\n\n

Agora cada caso tem um valor string. Você pode obtê-lo através da propriedade value:

\n\n
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n
\n\n

E também pode criar um caso a partir do valor de volta:

\n\n
<?php\n\n$status = OrderStatus::from('shipped');\necho $status->name; // 'Shipped'\n
\n\n

O método from() lançará uma exceção se o valor não for encontrado. Se quiser obter null, use tryFrom().

\n\n

Métodos em Enum: comportamento dentro das enumerações

\n\n

Um dos recursos mais legais do PHP enum é a possibilidade de adicionar métodos diretamente dentro da enumeração. Isso transforma o enum de uma simples lista de constantes em um objeto completo com lógica.

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n\n    public function label(): string                

Blogs

Book Recommendations