PHP 8.1.9 Released!

Enumerações básicas

Enums são similares às classes, e compartilham o mesmo namespaces que as classes, interfaces, e traits. Elas também podem ser carregadas automaticamente da mesma maneira. Uma Enum define um novo tipo, que possui um número fixo e limitado de valores legais possíveis.

<?php
enum Naipe
{
    case 
Copas;
    case 
Ouros;
    case 
Paus;
    case 
Espadas;
}
?>

Essa declaração cria um novo tipo enumerado chamado Naipe, que possui quatro e apenas quatro valores permitidos: Naipe::Copas, Naipe::Ouros, Naipe::Paus, e Naipe::Espadas. Variáveis podem ser atribuídas a um desses valores permitidos. Uma função pode ser tipada contra um tipo enumerado, caso em que apenas os valores desse tipo podem ser passados.

<?php
function pegar_uma_carta(Naipe $naipe) { ... }

$val Naipe::Ouros;

// OK
pegar_uma_carta($val);
// OK
pegar_uma_carta(Naipe::Paus);
// TypeError: pegar_uma_carta(): Argument #1 ($naipe) must be of type Naipe, string given
pegar_uma_carta('Espadas');
?>

Uma enumeração pode ter zero ou mais definições case, sem limite máximo. Uma enum sem nenhum caso é sintaticamente válida, embora inútil.

Os nomes dos casos seguem as mesmas regras de sintaxe de qualquer nome do PHP, mais detalhados na seção sobre Constantes.

Por padrão os casos não são internamente associados por um valor escalar. Ou seja, Suit::Copas is not equal to "0". Instead, each case is backed by a singleton object of that name. That means that:

<?php
$a 
Naipe::Espadas;
$b Naipe::Espadas;

$a === $b// true

$a instanceof Naipe;  // true
?>

Isso também significa que os valores enum nunca são < ou > do que o outro, uma vez que essas comparações não fazem sentido em objetos. Essas comparações sempre retornarão falso ao trabalhar com valores enum.

Esse tipo de caso, sem dados relacionados, é chamado de "Caso Puro". Uma Enum que contém apenas Casos Puros é chamada de Pure Enum (enum pura).

Todos os Casos Puros são implementados como instâncias de seus tipos enum. O tipo enum é representado internamente como uma classe.

Todos os Casos têm uma propriedade somente leitura, name, que é o nome (sensível a maiúsculas e minúsculas) do próprio caso.

<?php
print Naipe::Espadas->name;
// imprime "Espadas"
?>
add a note

User Contributed Notes 2 notes

up
20
sajjad.golchin
7 months ago
<?php

enum Colors
{
    case
Red;
    case
Blue;
    case
Green;

    public function
getColor(): string
   
{
        return
$this->name;
    }
}

function
paintColor(Colors $colors): void
{
    echo
"Paint : " . $colors->getColor() . PHP_EOL;
}

paintColor(Colors::Red);
paintColor(Colors::Green);
paintColor(Colors::Blue);

/*
    output :
    ------------------------
    Paint : Red
    Paint : Green
    Paint : Blue
*/
?>
up
9
Andrzej
2 months ago
Basic enumerations does not implement from() or tryFrom() methods, but it is possible to return the corresponding Enum Case from variable using the constant() function.

<?php

enum Limit
{
    case
Min;
    case
Max;
}

$value = 'Min';

$limit = constant("Limit::{$value}");

$limit === Limit::Min; // true

?>
To Top