Hello!
Is there a best practice / recommandation when I want to use a variable declared outside of a function when it comes to using:
- global $myVar
- $GLOBALS['myVar']
Thank you.
Hello!
Is there a best practice / recommandation when I want to use a variable declared outside of a function when it comes to using:
Thank you.
I would go for global in the top of your function. In that way, you can easily see what globals are used.
What you should really do is pass the variable to the function instead of using a global at all.
An example how to change a variable outside of the function via passing it as reference parameter:
function myFunc(&$myVar)
{
$myVar = 10;
}
$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
Ofcause, 'global' is right way. Global variables setting in PHP using prefix global.
I wold say, it's recommended not to use Globals in OOP, there should always be a better way
Well, you should only use globals in limited circumstances, but to answer your question:
global
is potentially marginally faster (it will rarely make a difference).$GLOBALS
(not $GLOBAL
) is more readable, because every time you see it, you know you are accessing/changing a global variable. This can crucial in avoiding nasty bugs.unset($GLOBALS['varname'])
, not global $varname; unset($varname);
.As to points 1 and 2, I'll quote Sara Golemon here:
What does that mean for your use of the
$GLOBALS
array? That's right, theglobal
keyword is technically faster. Now, I want to be really clear about one thing here. The minor speed affordance given by using your globals as localized [compiled variables] needs to be seriously weighed against the maintainability of looking at your code in five years and knowing that$foo
came from the global scope.something_using($GLOBALS['foo']);
will ALWAYS be clearer to you down the line thanglobal $foo; /* buncha code */ something_using($foo);
Don't be penny-wise and pound foolish..
global $var;
is equivalent to $var =& $GLOBALS['var']
.
Some people suggested that it is faster than using $GLOBALS
, however it's not necessarily the case. If you use the variable only once, $GLOBALS
will be faster, because you won't waste time for assignment.
However, if you do use the variable multiple times, using global
(or the equivalent assignment) is faster, because search the array for the var
key only once.
That's it about speed. However, the speed difference is really small, and readability is more important. However, different people have different preferences about readability -- I prefer global
, some other people answering here prefer $GLOBALS
, so it's up to you to decide what looks better.