Search code examples
phpfunctionvariablesglobal-variables

isset() and PHP global variables


Regarding global variable initialization,

function hello_testing() {
    global $conditional_random;
    if (isset($conditional_random)) {
        echo "foo is inside";
    }
}

The global variable (conditional_random) may not be initialized before the hello_testing() function is called.

So, what happens to my validation via isset() when $conditional_random is not initialized? Will it fail or it will always be true?


Solution

  • Well, why don't you just test ? ;-)

    Note: It is not as easy as you'd think -- read the full answer ;-)


    Calling the `hello_testing();` function, without setting the variable:
    hello_testing();
    

    I get no output -- which indicates isset returned false.


    Calling the function, after setting the variable:
    $conditional_random = 'blah';
    hello_testing();
    

    I get an output:

    foo is inside
    

    Which indicates global works as expected, when the variable is set -- well, one should not have any doubt about that ^^



    But note that isset will return false if a variable is set, and null!


    See the manual page of isset()

    Which means that a better test would be:

    function hello_testing() {
        global $conditional_random;
        var_dump($conditional_random);
    }
    
    hello_testing();
    

    And this displays:

    null
    

    No Notice: the variable exists! Even if null.

    As I didn't set the variable outside of the function, it shows that global sets the variable -- but it doesn't put a value into it; which means it's null if not already set outside the function.


    While:
    function hello_testing() {
        //global $conditional_random;
        var_dump($conditional_random);
    }
    
    hello_testing();
    

    Gives:

    Notice: Undefined variable: conditional_random
    

    It proves that notices are enabled ;-)

    And, if global didn't "set" the variable, the previous example would have given the same notice.


    And, finally:
    function hello_testing() {
        global $conditional_random;
        var_dump($conditional_random);
    }
    
    $conditional_random = 'glop';
    hello_testing();
    

    Gives:

    string 'glop' (length=4)
    

    (This is to purely to demonstrate my example is not tricked ^^)