Php – global variables in php not working as expected


I'm having trouble with global variables in php. I have a $screen var set in one file, which requires another file that calls an initSession() defined in yet another file. The initSession() declares global $screen and then processes $screen further down using the value set in the very first script.

How is this possible?

To make things more confusing, if you try to set $screen again then call the initSession(), it uses the value first used once again. The following code will describe the process. Could someone have a go at explaining this?

$screen = "";            // From model.php
require "controller.php";         // From model.php
initSession();                    // From controller.php
global $screen;                   // From  
echo $screen; // prints "" // From anywhere
$screen = "";          // From model2.php
require "controller2.php"         
global $screen;
echo $screen; // prints "" 

If I declare $screen global again just before requiring the second model, $screen is updated properly for the initSession() method. Strange.

Best Solution

Global DOES NOT make the variable global. I know it's tricky :-)

Global says that a local variable will be used as if it was a variable with a higher scope.

E.G :


$var = "test"; // this is accessible in all the rest of the code, even an included one

function foo2()
    global $var;
    echo $var; // this print "test"
    $var = 'test2';

global $var; // this is totally useless, unless this file is included inside a class or function

function foo()
    echo $var; // this print nothing, you are using a local var
    $var = 'test3';

echo $var;  // this will print 'test2'

Note that global vars are rarely a good idea. You can code 99.99999% of the time without them and your code is much easier to maintain if you don't have fuzzy scopes. Avoid global if you can.