Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

241
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!