es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo verificar si es un tipo enumerado?

¿Cómo puedo saber si una variable es del tipo enum?

He instalado PHP 8.1 en mi Ubuntu 20.04. Estoy probando los nuevos tipos “enum”.

¿Es algo posible?

is_enum($var)
gettype($var) === 'enum'
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay una función incorporada is_enum() en PHP para verificar directamente si una variable es de tipo enum. Sin embargo, puedes usar la clase ReflectionType para obtener el tipo de una variable y luego verificar si es una instancia de ReflectionEnum. Aquí tienes un ejemplo:

    // Definir un enum
    enum Fruit {
      case APPLE;
      case ORANGE;
    }
    
    // Verificar si una variable es un enum
    function is_enum($var) {
      $type = get_debug_type($var);  // Obtener el tipo de $var
      $refType = new ReflectionNamedType($type);  // Crear un objeto de tipo reflexión
      return $refType->isEnum();  // Verificar si es instancia de ReflectionEnum
    }
    
    // Probar la función
    $fruit = Fruit::APPLE;
    echo get_debug_type($fruit) . "\n";  // Muestra "Fruit"
    echo is_enum($fruit) . "\n";  // Muestra "1"
    echo is_enum(123) . "\n";  // Muestra "0"
    

    Alternativamente, también puedes verificar si el tipo de una variable es una cadena y su valor coincide con el nombre de un enum definido utilizando la función defined(). Aquí tienes un ejemplo:

    // Definir un enum
    enum Fruit {
      case APPLE;
      case ORANGE;
    }
    
    // Verificar si una variable es un enum
    function is_enum($var) {
      if (is_string($var) && defined($var)) {  // Verificar si $var es una cadena y coincide con una constante definida
        $const = constant($var);  // Obtener el valor de la constante
        $refConst = new ReflectionClassConstant(Fruit::class, $const);  // Crear un objeto de constante de reflexión
        return $refConst->isEnum();  // Verificar si es instancia de ReflectionEnum
      }
      return false;
    }
    
    // Probar la función
    $fruit = Fruit::APPLE;
    echo get_debug_type($fruit) . "\n";  // Muestra "Fruit"
    echo is_enum($fruit) . "\n";  // Muestra "1"
    echo is_enum(Fruit::class) . "\n";  // Muestra "0"
    

    Nota que los ejemplos anteriores asumen que estás utilizando la característica enum en PHP 8.1 o posterior. Si estás utilizando una versión anterior de PHP, puedes simular enums utilizando valores constantes o clases. En esos casos, puedes modificar la función is_enum() en consecuencia para verificar esos tipos.

Comments are closed.