Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

232
Vistas
Compruebe si la enumeración de PHP contiene mayúsculas y minúsculas, como el método try() en enumeraciones básicas (no respaldadas)

tengo enumeración básica

 enum Fruit { case APPLE; case ORANGE; case BANANA; }

y alguna función que usa escribir con esa enumeración:

 function eatFruit (Fruit $fruit) { // do stuff }

y variable con contenido desconocido

 $fruit = $_POST['fruit']; // user choosed "MILK" if (?????) { // how to check if it's fruit? eatFruit($fruit); // this should not be executed }

No puedo encontrar en la documentación una forma simple de verificar si la enumeración contiene un caso específico.

Es posible con enumeraciones respaldadas como esa

 enum Fruit { case APPLE = 'APPLE'; case ORANGE = 'ORANGE'; case BANANA = 'BANANA'; } Fruit::from(''); Fruit::tryFrom('');

Esto funcionará, pero from no existe en enumeraciones sin respaldo de mi primer ejemplo.

 Fatal error: Uncaught Error: Call to undefined method Fruit::from()
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede usar el método estático cases() para esto. Esto devuelve una matriz de todos los valores en la enumeración. Los valores tienen una propiedad de "nombre" que es una representación de cadena con la que puede verificar (las enumeraciones respaldadas también tienen una propiedad de "valor" que contiene el valor de cadena que definió en la enumeración).

Entonces, una implementación de ejemplo podría ser algo como:

 enum Fruit { case APPLE; case ORANGE; case BANANA; } // String from user input $fruit = $_POST['fruit']; // Find matching fruit in all enum cases $fruits = Fruit::cases(); $matchingFruitIndex = array_search($fruit, array_column($fruits, "name")); // If found, eat it if ($matchingFruitIndex !== false) { $matchingFruit = $fruits[$matchingFruitIndex]; eatFruit($matchingFruit); } else { echo $fruit . " is not a valid Fruit"; } function eatFruit(Fruit $fruit): void { if ($fruit === Fruit::APPLE) { echo "An apple a day keeps the doctor away"; } elseif ($fruit === Fruit::ORANGE) { echo "When life gives you oranges, make orange juice"; } elseif ($fruit === Fruit::BANANA) { echo "Banana for scale"; } }

Versión de trabajo con datos de muestra: https://3v4l.org/ObD3s

Si desea hacer esto más a menudo con diferentes enumeraciones, puede escribir una función auxiliar para esto:

 function getEnumValue($value, $enumClass) { $cases = $enumClass::cases(); $index = array_search($value, array_column($cases, "name")); if ($index !== false) { return $cases[$index]; } return null; } $fruit = getEnumValue($_POST['fruit'], Fruit::class); if ($fruit !== null) { eatFruit($fruit); } else { echo $_POST['fruit'] . " is not a valid Fruit"; }

Ejemplo con los mismos datos de muestra: https://3v4l.org/bL8Wa

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda