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 = "list1.inc"; // From model.php
require "controller.php"; // From model.php
initSession(); // From controller.php
global $screen; // From Include.Session.inc
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc"; // From model2.php
require "controller2.php"
initSession();
global $screen;
echo $screen; // prints "list1.inc"
Update:
If I declare $screen
global again just before requiring the second model, $screen is updated properly for the initSession()
method. Strange.
You must declare a variable as global before define values for it.
The global scope spans included and required files, you don't need to use the global keyword unless using the variable from within a function. You could try using the $GLOBALS array instead.
global $foo
doesn't mean "make this variable global, so that everyone can use it".global $foo
means "within the scope of this function, use the global variable$foo
".I am assuming from your example that each time, you are referring to $screen from within a function. If so you will need to use
global $screen
in each function.It is useless till it is in the function or a class. Global means that you can use a variable in any part of program. So if the global is not contained in the function or a class there is no use of using Global
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 :
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.You need to put "global $screen" in every function that references it, not just at the top of each file.