El mantenimiento de este proyecto se realiza a través de Tidelift.
En primer lugar, y principalmente, SplEnum
no está integrado en PHP, debes instalar la extensión por separado.
Usar una enumeración en lugar de constantes de clase proporciona las siguientes ventajas:
Puede utilizar una enumeración como tipo de parámetro: function setAction(Action $action) {
Puede utilizar una enumeración como tipo de retorno: function getAction() : Action {
Puede enriquecer la enumeración con métodos (por ejemplo, format
, parse
,…)
Puede extender la enumeración para agregar nuevos valores (haga que su enumeración final
para evitarlo)
Puede obtener una lista de todos los valores posibles (ver más abajo)
Esta clase Enum no está destinada a reemplazar las constantes de clase, sino que solo debe usarse cuando tenga sentido.
composer require myclabs/php-enum
use MyCLabsEnumEnum;/** * Acción enum * * @extends Enum<Action::*> */final class Acción extiende Enum {const privada VER = 'ver'; const privada EDITAR = 'editar'; }
$action = Action::VIEW();// o con una clave dinámica:$action = Action::$key();// o con un valor dinámico:$action = Action::from($value);/ / o$acción = nueva Acción($valor);
Como puede ver, los métodos estáticos se implementan automáticamente para proporcionar acceso rápido a un valor de enumeración.
Una ventaja sobre el uso de constantes de clase es poder usar una enumeración como tipo de parámetro:
función setAction(Acción $acción) {// ...}
__construct()
El constructor verifica que el valor exista en la enumeración.
__toString()
Puedes echo $myValue
, mostrará el valor de enumeración (valor de la constante)
getValue()
Devuelve el valor actual de la enumeración.
getKey()
Devuelve la clave del valor actual en Enum
equals()
Prueba si las instancias de enumeración son iguales (devuelve true
si los valores de enumeración son iguales, false
en caso contrario)
Métodos estáticos:
from()
Crea una instancia de Enum, verificando que el valor exista en la enumeración.
Método toArray()
Devuelve todos los valores posibles como una matriz (nombre constante en clave, valor constante en valor)
keys()
Devuelve los nombres (claves) de todas las constantes en la clase Enum
values()
Devuelve instancias de la clase Enum de todas las constantes Enum (nombre de la constante en la clave, instancia de Enum en el valor)
isValid()
Compruebe si el valor probado es válido en el conjunto de enumeraciones
isValidKey()
Compruebe si la clave probada es válida en el conjunto de enumeraciones
assertValidValue()
Afirma que el valor es válido en el conjunto de enumeraciones, de lo contrario arroja una excepción
search()
Tecla de retorno para el valor buscado
La demanda colectiva final amplía Enum {const privada VER = 'ver'; const privada EDITAR = 'editar'; }// Método estático:$acción = Acción::VER();$acción = Acción::EDITAR();
Los ayudantes de métodos estáticos se implementan utilizando __callStatic()
.
Si le interesa el autocompletado de IDE, puede implementar los métodos estáticos usted mismo:
La demanda colectiva final amplía Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
o puedes usar phpdoc (esto es compatible con PhpStorm, por ejemplo):
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extiende Enum {const privada VER = 'ver'; const privada EDITAR = 'editar'; }
La enumeración nativa llegó a PHP en la versión 8.1: https://www.php.net/enumerations
Si su proyecto ejecuta PHP 8.1+ o su biblioteca lo tiene como requisito mínimo, debe usarlo en lugar de esta biblioteca.
Al migrar desde myclabs/php-enum
, el esfuerzo debería ser pequeño si el uso se realiza de la manera recomendada:
constantes privadas
clases finales
ningún método anulado
Cambios para la migración:
La definición de clase debe cambiarse de
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extiende Enum {const privada VER = 'ver'; const privada EDITAR = 'editar'; }
a
Acción de enumeración: cadena {caso VER = 'ver'; caso EDITAR = 'editar'; }
Todos los lugares donde se utilizó la clase como tipo seguirán funcionando.
Usos y el cambio necesario:
Operación | myclabs/php-enum | enumeración nativa |
---|---|---|
Obtener una instancia cambiará de | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
Crear una enumeración a partir de un valor respaldado | $enumCase = new Action('view') | $enumCase = Action::from('view') |
Obtener el valor respaldado de la instancia de enumeración | $enumCase->getValue() | $enumCase->value |
Comparar dos instancias de enumeración | $enumCase1 == $enumCase2 o $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
Obtener la clave/nombre de la instancia de enumeración | $enumCase->getKey() | $enumCase->name |
Obtenga una lista de todas las posibles instancias de la enumeración. | Action::values() | Action::cases() |
Obtenga un mapa de posibles instancias de la enumeración asignadas por nombre | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) o (new ReflectionEnum(Action::class))->getConstants() |
Obtenga una lista de todos los nombres posibles de la enumeración. | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
Obtenga una lista de todos los posibles valores respaldados de la enumeración | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
Obtenga un mapa de posibles valores respaldados de la enumeración asignada por nombre | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) o array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
Enumeración nativa PHP 8.1+
Mapeo de enumeración de doctrina
Integración de Symfony ParamConverter
Integración PHPStan