在以下两种在闭包中访问全局变量的情况之间是否存在任何性能或其他差异:
案例1:
$closure = function() use ($global_variable) {
// Use $global_variable to do something.
}
案例2:
$closure = function() {
global $global_variable;
// Use $global_variable to do something.
}
答案 0 :(得分:9)
您的两个示例之间存在重要差异:
$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
在闭包定义期间获取$global_variable
的值,而global
在执行期间获取当前值$global_variable
。
global
从全局范围继承变量,而use
从父范围继承它们。
答案 1 :(得分:0)
Use
关键字位于父级范围内,而global
和$GLOBALS
来自任何地方。
这意味着如果你使用global
,你可能不知道价值是否已经改变,从何处以及什么是改变的类型。
使用use
可以获得更多控制权。所以这取决于你的需求。