问题
Is there any kind of performance or other difference between following two cases of accessing a global variable in a closure:
Case 1:
$closure = function() use ($global_variable) {
// Use $global_variable to do something.
}
Case 2:
$closure = function() {
global $global_variable;
// Use $global_variable to do something.
}
回答1:
There is an important difference between your two examples:
$global_variable = 1;
$closure = function() use ($global_variable) {
return $global_variable;
};
$closure2 = function() {
global $global_variable;
return $global_variable;
};
$global_variable = 99;
echo $closure(); // this will show 1
echo $closure2(); // this will show 99
use
takes the value of $global_variable
during the definition of the closure while global
takes the current value of $global_variable
during execution.
global
inherits variables from the global scope while use
inherits them from the parent scope.
回答2:
Use
keyword are in parent scope, while global
and $GLOBALS
are from everywhere.
That's mean if you use global
you may not know if the value have changed, from where by what and what is the kind of the change.
You have more control by using use
. So it depends on your needs.
来源:https://stackoverflow.com/questions/39741443/php-difference-between-use-or-global-to-access-a-global-variable-in-a-cl