w3schools validar vacio que is_null formulario este empty como campo _get php null isset

validar - php is null or empty



Compruebe si el valor es isset y nulo (8)

Aquí una solución tonta usando xdebug. ;-)

function is_declared($name) { ob_start(); xdebug_debug_zval($name); $content = ob_get_clean(); return !empty($content); } $foo = null; var_dump(is_declared(''foo'')); // -> true $bla = ''bla''; var_dump(is_declared(''bla'')); // -> true var_dump(is_declared(''bar'')); // -> false

Necesito verificar si el valor se define como cualquier cosa, incluso nulo. isset trata los valores nulos como indefinidos y devuelve false . Tome lo siguiente como un ejemplo:

$foo = null; if(isset($foo)) // returns false if(isset($bar)) // returns false if(isset($foo) || is_null($foo)) // returns true if(isset($bar) || is_null($bar)) // returns true, raises a notice

Tenga en cuenta que $bar no está definido.

Necesito encontrar una condición que satisfaga lo siguiente:

if(something($bar)) // returns false; if(something($foo)) // returns true;

¿Algunas ideas?


El siguiente código escrito como extensión PHP es equivalente a array_key_exists ($ name, get_defined_vars ()) (gracias a Henrik y Hannes).

// get_defined_vars() // https://github.com/php/php-src/blob/master/Zend/zend_builtin_functions.c#L1777 // array_key_exists // https://github.com/php/php-src/blob/master/ext/standard/array.c#L4393 PHP_FUNCTION(is_defined_var) { char *name; int name_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } if (!EG(active_symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } if (zend_symtable_exists(EG(active_symbol_table), name, name_len + 1)) { RETURN_TRUE; } }


He descubierto que compact es una función que ignora las variables no establecidas, pero actúa sobre las establecidas como null , por lo que cuando se tiene una tabla de símbolos local grande me imagino que se puede obtener una solución más eficiente que verificar array_key_exists(''foo'', get_defined_vars()) mediante el uso de array_key_exists(''foo'', compact(''foo'')) :

$foo = null; echo isset($foo) ? ''true'' : ''false''; // false echo array_key_exists(''foo'', compact(''foo'')) ? ''true'' : ''false''; // true echo isset($bar) ? ''true'' : ''false''; // false echo array_key_exists(''bar'', compact(''bar'')) ? ''true'' : ''false''; // false


IIRC, puede usar get_defined_vars() para esto:

$foo = NULL; $vars = get_defined_vars(); if (array_key_exists(''bar'', $vars)) {}; // Should evaluate to FALSE if (array_key_exists(''foo'', $vars)) {}; // Should evaluate to TRUE


Puede usar is_null y empty lugar de isset (). Vacío no imprime un mensaje de error si la variable no existe.


Si está tratando con propiedades de objetos que pueden tener un valor de NULL, puede usar: property_exists() lugar de isset()

<?php class myClass { public $mine; private $xpto; static protected $test; function test() { var_dump(property_exists($this, ''xpto'')); //true } } var_dump(property_exists(''myClass'', ''mine'')); //true var_dump(property_exists(new myClass, ''mine'')); //true var_dump(property_exists(''myClass'', ''xpto'')); //true, as of PHP 5.3.0 var_dump(property_exists(''myClass'', ''bar'')); //false var_dump(property_exists(''myClass'', ''test'')); //true, as of PHP 5.3.0 myClass::test(); ?>

A diferencia de isset (), property_exists () devuelve TRUE incluso si la propiedad tiene el valor NULL.



is_null($bar) devuelve verdadero, ya que no tiene ningún valor. Alternativamente, puede usar:

if(isset($bar) && is_null($bar)) // returns false

para verificar si $bar está definido y solo devolverá verdadero si:

$bar = null; if(isset($bar) && is_null($bar)) // returns true