Enums en PHP: cómo usar enumeraciones con ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Enums en PHP: del caos al orden

\n\n

¿Alguna vez ha escrito código donde el estado de un pedido se almacena como una cadena 'new', 'paid', 'shipped'? ¿Y luego ha tenido errores por un error tipográfico como 'shippped'? ¿O ha pasado a una función getOrderByStatus('Active'), cuando esperaban 'active'? ¿Le suena familiar? Entonces este artículo es para usted.

\n\n

Durante mucho tiempo, PHP no tuvo enumeraciones nativas (enums). Los desarrolladores se las ingeniaban: usaban constantes de clase, arrays, incluso comentarios ficticios. Pero con la llegada de PHP 8.1 todo cambió. Ahora tenemos enumeraciones PHP completas: una herramienta poderosa que hace que el código sea más limpio, seguro y comprensible.

\n\n

En esta guía, analizaremos los enums PHP de principio a fin: desde la sintaxis básica hasta técnicas avanzadas. Aprenderá a crear enumeraciones, trabajar con ellas, compararlas y usarlas en proyectos reales. ¡Comencemos!

\n\n

¿Qué es un Enum en PHP?

\n\n

Un Enum (enumeración) es un tipo de datos que se limita a un conjunto de valores predefinidos. En palabras simples: usted define una lista de opciones posibles, y una variable solo puede tomar uno de ellos. Sin cadenas aleatorias, sin valores no verificados.

\n\n

En PHP 8.1, las enumeraciones se implementan como clases especiales. Cada valor es un objeto, no solo una constante. Esto ofrece muchas ventajas:

\n\n
    \n
  • Tipado estricto: el compilador no permitirá 'pending' en lugar de Status::Pending
  • \n
  • Seguridad: sin errores tipográficos accidentales
  • \n
  • Legibilidad: el código habla por sí mismo
  • \n
  • Soporte IDE: el autocompletado funciona de maravilla
  • \n
\n\n

Sintaxis de Enum en PHP

\n\n

Crear una enumeración en PHP es sencillo. Use la palabra clave 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

Ahora podemos usar OrderStatus como tipo:

\n\n
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n    // Procesamiento del estado\n}\n\n// Pasamos el valor:\nupdateOrderStatus(OrderStatus::Shipped);\n
\n\n

Intente pasar la cadena 'shipped' — PHP mostrará un error de tipo. Eso es la magia de los enum en PHP.

\n\n

Enum con respaldo (Backed Enums)

\n\n

A menudo necesitamos asociar cada caso con un valor específico, por ejemplo, un número o una cadena para la base de datos. En PHP esto se llama 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

Ahora cada caso tiene un valor de cadena. Puede obtenerlo a través de la propiedad value:

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

Y también puede crear un caso a partir del valor inversamente:

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

El método from() lanzará una excepción si no se encuentra el valor. Si desea obtener null, use tryFrom().

\n\n

Métodos en Enum: comportamiento dentro de las enumeraciones

\n\n

Una de las características geniales de los PHP enum es la posibilidad de agregar métodos directamente dentro de la enumeración. Esto convierte al enum de una simple lista de constantes en un objeto completo con 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