Check if value isset and null

前端 未结 8 391
迷失自我
迷失自我 2020-11-30 01:26

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

相关标签:
8条回答
  • 2020-11-30 01:55

    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.

    0 讨论(0)
  • 2020-11-30 02:00

    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
    
    0 讨论(0)
  • 2020-11-30 02:06

    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
    
    0 讨论(0)
  • 2020-11-30 02:10

    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
    
    0 讨论(0)
  • 2020-11-30 02:13

    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
    
    0 讨论(0)
  • 2020-11-30 02:14

    You could use is_null and empty instead of isset(). Empty doesn't print an error message if the variable doesn't exist.

    0 讨论(0)
提交回复
热议问题