[SOLVED] isset() and PHP global variables

Issue

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 ^^)

Answered By – Pascal MARTIN

Answer Checked By – Mary Flores (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.