Enums em PHP: do caos à ordem
\n\nVocê 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ê.
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\nNeste 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\nO que é Enum no PHP?
\n\nEnum (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\nNo 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 deStatus::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
Sintaxe de Enum no PHP
\n\nCriar uma enumeração no PHP é simples. Use a palavra-chave enum:
<?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\nAgora podemos usar OrderStatus como tipo:
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n // Processamento do status\n}\n\n// Passando o valor:\nupdateOrderStatus(OrderStatus::Shipped);\n\n\nTente passar a string 'shipped' — o PHP emitirá um erro de tipo. Essa é a mágica do enum no PHP.
Enum com backing (Backed Enums)
\n\nFrequentemente, 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\nAgora cada caso tem um valor string. Você pode obtê-lo através da propriedade value:
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n\n\nE 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\nO método from() lançará uma exceção se o valor não for encontrado. Se quiser obter null, use tryFrom().
Métodos em Enum: comportamento dentro das enumerações
\n\nUm 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