Check if variable is_undefined in PHP

34,487

Solution 1

I haven´t used it yet - but I think that "get_defined_vars" should be worth a look... http://php.net/manual/en/function.get-defined-vars.php

I would give it a try and dump the result.

Solution 2

I think that get_defined_vars is a good candidate for such job:

array_key_exists('myNull', get_defined_vars());

Should do what you expect.

If you work on a global context, you can also use:

array_key_exists('myNull', $GLOBALS);

Solution 3

If you want an is_undefined function I would prefer not to work with arrays so I would do this:

function is_undefined(&$test) {
    return isset($test) && !is_null($test);
}

So when you echo isset($myNull); it converts the boolean(true) to "". thats why the value is blank. If you want to see it on the screen you can do var_dump(isset($myNull)); that will display if it's true or false.

Also you have an echo of $myUndefined but it's not set yet so that's why you get a warning. What you want to do is:

if (!empty($myUndefined)) {
    // variable is defined so do something with it
    echo '$myUndefined value = "' . $myUndefined . '"<br />';
} else {
    echo 'Oops, $myUndefined is Undefined!<br />";
}

Here is a brief overview of isset() vs. is_null() vs. empty()

$foo = null;
// isset($foo) == true;
// empty($foo) == true;
// is_null($foo) == true;

// Notice I don't set $foo2 to anything
// isset($foo2) == false;
// empty($foo2) == true;
// is_null($foo2) throws a notice!

$foo3 = false;
// isset($foo2) == true;
// empty($foo2) == true;
// is_null($foo2) == false;

$foo4 = 1234;
// isset($foo2) == true;
// empty($foo2) == false;
// is_null($foo2) == false;

Solution 4

You can use compact() for this too, if the variable you give it isn't in the symbol table it returns an empty array, otherwise an array containing the variable name/value pair, just cast the result to a boolean

<?php

$myNull = null;

$isDefined = (bool) compact('myNull'); // true

$otherIsDefined = (bool) compact('myUndefined'); // false 
Share:
34,487
tjbourke
Author by

tjbourke

Updated on February 02, 2021

Comments

  • tjbourke
    tjbourke over 3 years

    In PHP, I want to check if a variable has not been set/defined, where setting a variable NULL is considered set/defined.

    I'm aware everything here: http://php.net/manual/en/types.comparisons.php including isset(), empty(), and is_null(). None of these appear to be what I'm looking for. Consider the following example:

    <?php 
    $myNull = null;
    echo 'isset($myNull): "'.isset($myNull).'"<br />';
    echo '$myNull value = "'.$myNull . '"<br />';
    
    echo "<br />";
    
    echo 'isset($myUndefined): "'.isset($myUndefined).'"<br />';
    echo '$myUndefined value = "'.$myUndefined . '"<br />';
    ?>
    

    This example outputs something like:
    isset($myNull): ""
    $myNull value = ""

    isset($myUndefined): ""
    Notice: Undefined variable: myUndefined in C:\wamp\www\plm\temp4.php on line 9
    $myUndefined value = ""

    I want to know if a variable is Undefined as it says above in the notice. I want a function, call it "is_undefined", where

    $myNull = null;
    is_undefined($myNull); // is false
    is_undefined($myUndefined); // is true
    

    Anyone? Thanks in advance.