Em PHP, podemos criar Enumeradores que armazenam constantes como seus membros e tendo um valor associado. Enuns podem herdar de interfaces e conter métodos.

Nesta parte de tutorial vamos aprender alguns usos comuns do tipo de dado enum como declaração, acesso a membros, associar valores, uso com switch e outros.

Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Declarar um enum
  2. Acessar membros
  3. Declarar membros com valor
  4. Iterar um enum
  5. Usar enum em switch
  6. Comparando enums
  7. Métodos
  8. interface
  9. trait
  10. Herança
  11. from e tryFrom
  12. Comparando com equals

A declaração de um enumerador, ou Enum, é feita como na sintaxe abaixo com auxílio da palavra reservada enum:

Sintaxe
enum nome_enumerador
{
  case NOME_MEMBRO1;
  case NOME_MEMBRO2;
  case NOME_MEMBRON;
};
            
Onde
-

Cada membro declarado deve ser iniciado por case e terminados por (;). O corpo de um Enum deve estar contido entre { e } e terminado por (;).

Diferente de outras linguagens como C e C++, os membros de um Enum, como declarado acima, não possuem valor padrão associado.

Exemplo 1
<?php

enum Teste
{
    case OPCAO1;
    case OPCAO2;
    case OPCAO3;
}
?>
Saída
-

O acesso ao membros de um Enum é feito utilizando o operador (::) seguido do nome do membro, como pode ser visto na sintaxe abaixo:

Sintaxe
nome_enumerador::NOME_MEMBRO;
            
Onde
-
Exemplo 2
<?php

enum Teste
{
    case OPCAO1;
    case OPCAO2;
    case OPCAO3;
}

 $enumTest = Teste::OPCAO1;
 
?>
Saída
-

Para associarmos valores a membros de um Enum, precisamos declará-los informando que os seus membros terão valor de um determinado tipo de dado. A sintaxe abaixo exemplifica o que foi discutido:

Sintaxe
enum nome_emumerador: tipo_dado
{
    case nome_membro1 = valor1;
    case nome_membro2 = valor2;
    case nome_membroN = valorN; 
}
Onde
tipo_dado: tipo de dados do enum. Apenas int e string são aceitos.
valor1..N: valores do tipo tipo_dado
Exemplo 3
<?php
enum Teste1: int 
{
    case OPCAO1 = 0;
    case OPCAO2 = 1;
    case OPCAO3 = 2;
}

enum Teste2: string 
{
    case OPCAO1 = 'opcao1';
    case OPCAO2 = 'opcao2';
    case OPCAO3 = 'opcao3';
}
?>
Saída
-

Os valores associados aos membros de um Enum são acessados utilizando os operadores (::) e (->) como pode ser visto abaixo. Tanto os valores quanto os nomes são recuperador com auxílio dos atributos value e name:

Sintaxe
nome_enum::nome_membro->value; 

nome_enum::nome_membro->name; 
Onde
value: valor associado ao membro
name: nome do membro
Exemplo 4
&l?php
enum Teste1: int 
{
    case OPCAO1 = 0;
    case OPCAO2 = 1;
    case OPCAO3 = 2;
}

echo Teste1::OPCAO1->value,"\n";
echo Teste1::OPCAO1->name;
?>
Saída
0
OPCAO1

Para iterarmos os membros de um enumerador, utilizamos o comando foreach em conjunto como o método cases que retorna um iterável contendo os membros do Enum.

Sintaxe
nome_enumerador::cases();
Exemplo 5
<?php
enum Teste1: int 
{
    case OPCAO1 = 0;
    case OPCAO2 = 1;
    case OPCAO3 = 2;
}

foreach(Teste::cases() as $elem){
    echo $elem->value," ",$elem->name,"\n";
?>
Saída
0 OPCAO1
1 OPCAO2
2 OPCAO3

A linguagem PHP permite que usemos os membros de um enumurador como parte dos cases do comando switch como pode ser visto abaixo:

Sintaxe
case nome_enumerador::nome_membro: 
Exemplo 6
<?php
enum Teste 
{
    case OPCAO1;
    case OPCAO2;
    case OPCAO3;
}

$var = Teste::OPCAO1;

switch($var)
{
    case Teste::OPCAO1; echo "opcao1\n"; break;
    case Teste::OPCAO2; echo "opcao2\n"; break;
    case Teste::OPCAO3; echo "opcao3\n"; break;
}
?>
Saída
opcao1

Para comparar dois enumeradores, utilizamos os operadores relacionais (==), (===), (!=), (<>) e (!==) vistos em PHP Básico: Operadores.

Sintaxe
$variavel_opcao_enum1 operador $opcao_enumerador2
Exemplo 7
<?php
enum Teste
{
    case OPCAO1;
    case OPCAO2;
    case OPCAO3;
}
enum Teste1
{
    case OPCAO1;
    case OPCAO2;
    case OPCAO3;
}

$var1 = Teste::OPCAO1;
$var2 = Teste::OPCAO1;
$var3 = Teste1::OPCAO1;

if($var1 == $var2)
    echo 'iguais',"\n";
else
    echo 'diferentes',"\n";
    
if($var1 == $var2)
    echo 'iguais',"\n";
else
    echo 'diferentes',"\n";
    
if($var1 === $var3)
    echo 'iguais',"\n";
else
    echo 'diferentes',"\n";
?>
Saída
iguais
iguais
diferentes

Outras formas de comparação de enumeradores serão abordadas em futuras atualizações.

  1. 22/08/2025 - revisão 3 - Ajustes: pontuais, sintaxes e targets de links
  2. 22/09/2024 - revisão 2 - Correção: sintaxe 'Usando Enum em switch', 'Comparando'; ajustes gramaticais e outros ajustes
  3. 05/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  4. 20/09/2023 - versão inicial