Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

233
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda