I need to check if value is defined as anything, including null. isset
treats null values as undefined and returns false
. Take the following as an
If you are dealing with object properties whcih might have a value of NULL you can use: property_exists() instead of 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();
?>
As opposed with isset(), property_exists() returns TRUE even if the property has the value NULL.
Here some silly workaround using 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
See Best way to test for a variable's existence in PHP; isset() is clearly broken
if( array_key_exists('foo', $GLOBALS) && is_null($foo)) // true & true => true
if( array_key_exists('bar', $GLOBALS) && is_null($bar)) // false & => false
is_null($bar)
returns true, since it has no values at all. Alternatively, you can use:
if(isset($bar) && is_null($bar)) // returns false
to check if $bar
is defined and will only return true if:
$bar = null;
if(isset($bar) && is_null($bar)) // returns true
IIRC, you can use get_defined_vars() for this:
$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
You could use is_null and empty instead of isset(). Empty doesn't print an error message if the variable doesn't exist.