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 Exceptions
y 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.