¿Qué tipo de variable estoy manejando?

Resumen.

Cuando estamos programando en ciertas ocasiones se plantea la necesidad de saber ante que tipo de variable nos encontramos, esto nos puede servir para identificar algún comportamiento no esperado de nuestro código. Para esto, podemos encontrar 8 funciones en PHP, el problema de estas funciones es que nos dicen si una función corresponde a un tipo o no. ArtesaniaWeb.Es ha desarrollado una función que nos da el tipo de variable que estamos usando.

Artículo.

En un artículo anterior ya hablamos sobre como aplicar una función a varios valores al mismo tiempo. Ahora lo que vamos a hacer es aplicar varias funciones a una misma variable.

PHP dispone en su librería de las siguientes funciones para determinar ante que tipo de variable nos encontramos, son estas:
  • is_null() - Comprueba si la variable es nula.
  • is_string() - Comprueba si la variable es una cadena.
  • is_numeric() - Comprueba si la variable es un número.
  • is_float() - Comprueba si el tipo de una variable es float o decimal.
  • is_int() - Comprueba si el tipo de una variable es integer o entero.
  • is_bool() - Comprueba si una variable es de tipo booleano.
  • is_array() - Comprueba si una variable es un array .
  • is_object() - Comprueba si una variable es un objeto.
Todas estas funciones tienen algo en común, y es que todas ellas operan bajo el mismo criterio. Todas ellas reciben un solo parámetro y todas ellas devuelven una respuesta booleana (o dicotómica), es decir, true o false (verdadero o falso). Si es true devuelven 1, si es false, no devuelven nada, es decir, null.

Con estas dos características podemos plantear un esquema común para aplicar estas funciones a una misma variable mediante un bucle. Para ello las guardamos en un array.

$funciones = array('is_null','is_numeric','is_int','is_float','is_string','is_bool','is_array','is_object');


Con todas la funciones en el array ahora solo tenemos que recorrer este array haciendo que cada una analices la variable de interés. Lo que podemos hacer de la siguiente manera:

    foreach($funciones as $key => $func){
        if($func($variable) <> null){
            $array_funcion[$key] = $func($variable);
            echo "La variable es tipo <b>$tipos_var[$key]</b> <small>($funciones[$key])</small><br /><hr>";
        }
    }


Este array, $array_funcion, puede tener 1 o 2 valores. Tendrá un solo valor si las funciones son mutuamente excluyentes, es decir, si es numérico no puede ser array, o si es objeto no puede ser string. Pero devolverá dos valores si no son mutuamente excluyentes, por ejemplo, $var = '3.14' devolverá string dado que esta entrecomillado, pero también devolverá numeric (numérico). Si $var = 3.14 (sin comillas) solo devolverá float.

De esta manera contamos los elementos del array resultante del bucle y contamos sus elementos. Si solo hay un elemento, sacamos su key, si hay dos elementos, sacamos las dos keys y las unimos en una sola variable, que nos dará la variable $tipo.

Con esto, vamos introduciendo los diferentes tipos de variables posibles y las asociamos a un valor que asignamos en el condicional switch en la variable $tipo_var.

Sin más, la función es esta:
<?php // Determina cual es el tipo de la variable // Funcion desarrollada por ArtesaniaWeb.es function TipoVar($variable){ $funciones = array('is_null','is_numeric','is_int','is_float','is_string','is_bool','is_array','is_object'); $tipos_var = array('Nula','Numerico','Entero','Decimal','Cadena','Boleano','Array','Objeto');     foreach($funciones as $key => $func){         if($func($variable) <> null){             $array_funcion[$key] = $func($variable);             //echo "La variable es tipo <b>$tipos_var[$key]</b> <small>($funciones[$key])</small><br /><hr>";         }     }         $n count($array_funcion);         $key_result array_keys($array_funcion);             if($n == 1){                 $tipo $key_result[0];             }else{                 $tipo "".$key_result[0]."".$key_result[1]."";             }     switch($tipo){             case $tipo == -1:    // Imposible             $tipo_var 0;             break;         case $tipo == 0:    // Variable Nula         $tipo_var 0;         break;             case $tipo == 4:    // Variable Cadena o string             $tipo_var 1;             break;         case $tipo == 5:    // Variable booleana         $tipo_var 2;         break;             case $tipo == 6:    // Variable Array             $tipo_var 3;             break;         case $tipo == 7:    // Variable Objeto         $tipo_var 4;         break;             case $tipo == 12:    // Variable Numerica entera             $tipo_var 5;             break;         case $tipo == 13:    // Variable Numerica decimal         $tipo_var 6;         break;             case $tipo == 14:    // Variable Cadena numerica             $tipo_var 7;             break;         default:         $tipo_var null;        //          break;     }         return $tipo_var;  } // Aplicamos la funcion  $una_variable '3.14';    // array(1,8,6,7)        new stdClass()        '3.14' $tipo_variable TipoVar($una_variable); $tipos = array('null','string','bool','array','object','numeric-int','numeric-float','string-numeric');          echo "<p>La funcion devuelve <b>$tipo_variable</b></p>     <p>Es decir: <b>$tipos[$tipo_variable]</b></p>"; /* Valores de respuesta para $tipo_variable: 0 -- Variable nula - null 1 -- Variable cadena - string 2 -- Variable booleana - true, false 3 -- Variable array - Array 4 -- Variable objeto - object 5 -- Variable numerica entera - numeric, int 6 -- Variable numerica decimal - numeric, float 7 -- Variable cadena numerica - string, numeric */ ?>
Que devolverá los siguientes valores:

0 -- Variable nula - null
1 -- Variable cadena - string
2 -- Variable booleana - true, false
3 -- Variable array - Array
4 -- Variable objeto - object
5 -- Variable numérica entera - numeric, int
6 -- Variable numérica decimal - numeric, float
7 -- Variable cadena numérica - string, numeric

Y esto es todo, esperamos que os resulte muy útil esta función para vuestros proyectos.
Tags: Tipo || null || numeric || int || float || string || bool || array

Comentarios.

Sin comentarios, publica el tuyo.