Enumeraciónes básicas

Enums son similares a las clases, y comparten los mismos espacios de nombres que las clases, interfaces y rasgos (traits). También se pueden cargar automáticamente de la misma manera. Un Enum define un nuevo tipo, que tiene un número fijo y limitado de valores válidos.

<?php

enum Suit
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;
}
?>

Esta declaración crea un nuevo tipo enumerado llamado Suit, que tiene cuatro y solo cuatro valores válidos: Suit::Hearts, Suit::Diamonds, Suit::Clubs y Suit::Spades. Las variables pueden asignarse a uno de esos valores válidos. Una función puede ser comprobada por tipo contra un tipo enumerado, en cuyo caso solo se pueden pasar valores de ese tipo.

<?php

function pick_a_card(Suit $suit)
{
/* ... */
}

$val = Suit::Diamonds;

// OK
pick_a_card($val);

// OK
pick_a_card(Suit::Clubs);

// TypeError: pick_a_card(): Argument #1 ($suit) must be of type Suit, string given
pick_a_card('Spades');
?>

Una enumeración puede tener cero o más definiciones de case, sin un máximo. Una enumeración de cero casos es sintácticamente válida, aunque bastante inútil.

Para casos de enumeración, se aplican las mismas reglas de sintaxis que a cualquier etiqueta en PHP, consulte Constantes.

Por omisión, los casos no están intrínsecamente respaldados por un valor escalar. Es decir, Suit::Hearts no es igual a "0". En su lugar, cada caso está respaldado por un objeto singleton de ese nombre. Eso significa que:

<?php

$a
= Suit::Spades;
$b = Suit::Spades;

$a === $b; // true

$a instanceof Suit; // true
?>

Esto también significa que los valores de enumeración nunca son < o > entre sí, ya que esas comparaciones no tienen sentido en objetos. Esas comparaciones siempre devolverán false al trabajar con valores de enumeración.

Estos tipos de casos, sin datos relacionados, se llaman "Casos Puros". Un Enum que contiene solo Casos Puros se llama un Pure Enum.

Todos los Casos Puros se implementan como instancias de su tipo de enumeración. El tipo de enumeración se representa internamente como una clase.

Todos los Casos tienen una propiedad de solo lectura, name, que es el nombre con distinción de mayúsculas y minúsculas del caso en sí.

<?php

print Suit::Spades->name;
// Imprime "Spades"
?>

Esto también hace posible utilizar la función defined() y constant() para comprobar la existencia o leer un caso de enumeración si el nombre se obtiene dinámicamente. Esto es, sin embargo, desaconsejado, ya que el uso de Enumeraciónes respaldadas debería funcionar para la mayoría de los casos de uso.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top