Saltar al contenido

Cómo saber si una variable es null o indefinido en php

Agradeceríamos tu ayuda para difundir nuestros enunciados con relación a las ciencias informáticas.

Solución:

Usando un ejemplo modificado de PHP – Diferenciar una variable indefinida de una null variable

lo podemos diferenciar:

$v1 = null;

echo (isset($v1) ? '$v1 set' : '$v1 not set') . PHP_EOL;
echo (is_null($v1) ? '$v1 null' : '$v1 not null') . PHP_EOL;
echo (empty($v1) ? '$v1 empty' : '$v1 not empty') . PHP_EOL;
echo (array_key_exists('v1', get_defined_vars()) ? '$v1 defined' : '$v1 not defined') . PHP_EOL;

echo PHP_EOL;
echo (isset($v2) ? '$v2 set' : '$v2 not set') . PHP_EOL;
echo (@is_null($v2) ? '$v2 null' : '$v2 not null') . PHP_EOL;
echo (empty($v2) ? '$v2 empty' : '$v2 not empty') . PHP_EOL;
echo (array_key_exists('v2', get_defined_vars()) ? '$v2 defined' : '$v2 not defined') . PHP_EOL;

huellas dactilares:

$v1 not set
$v1 null
$v1 empty
$v1 defined

$v2 not set
$v2 null
$v2 empty
$v2 not defined

nosotros podemos usar array_key_exists(..., get_defined_vars()) y is_null(...) para detectar ambas situaciones

No puede envolver este tipo de lógica en una función o método, ya que cualquier variable definida en la firma de una función se “establecerá” implícitamente. Prueba algo como esto (contiene olor a código)

function exception_error_handler($errno, $errstr, $errfile, $errline ) 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);

error_reporting(E_ALL);
set_error_handler("exception_error_handler");

try 
    if (null === $var) 
        // null your variable is, hmmm
    
 catch (ErrorException $e) 
    // variable is undefined

En PHP normalmente se consideran las variables que no se han configurado o que se han desarmado null. El significado de null es “sin valor”. Existe una clara diferencia entre “sin valor” y un valor dejado en blanco. Por ejemplo, si un usuario envió un formulario con foo=&bar=baz, $_GET['foo'] se establece en el valor de vacío string "", que es claramente diferente de null cuál sería el valor para cualquier key otro que 'foo' y 'bar'.

Todo eso dicho, tu poder averiguar si una variable nunca se estableció o unset, aunque lo harán siempre evaluar a true con is_null (is_null es el negativo de isset con la excepción de que arrojará avisos si el valor nunca se estableció).

Una forma es si tiene la variable en un array de algún tipo:

echo array_key_exists( $variableName, $theArray ) ? 'variable was set, possibly to null' : 'variable was never set';

Si necesita verificar una variable global, use el $GLOBALS array:

echo array_key_exists( $variableName, $GLOBALS ) ? 'variable exists in global scope' : 'this global variable doesn't exist';

El método alternativo que se me ocurrió para averiguar si la variable se configuró es un poco más complicado y realmente innecesario a menos que sea una característica que usted absolutamente tengo que tener (en cuyo caso debería poder construirlo sin demasiada dificultad).

Se basa en el hecho de que is_null activa un aviso cuando no se ha establecido una variable. Agregue un controlador de errores que convierta errors en Exceptionsy usa un try...catch... bloque para capturar la excepción que se lanza y establecer una bandera en el catch declaración. Justo después del catch bloque ejecute su código que se basa en esta característica.

Es un truco sucio y desagradable si me preguntas, y completamente innecesario, ya que null debe considerarse lo mismo que un unset variable.

Finalizando este artículo puedes encontrar los comentarios de otros gestores de proyectos, tú todavía eres capaz insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *