PHP - ' use()'之间的区别或者'全球'在闭包中访问全局变量?

时间:2016-09-28 08:01:17

标签: php scope closures anonymous-function

在以下两种在闭包中访问全局变量的情况之间是否存在任何性能或其他差异:

案例1:

$closure = function() use ($global_variable) {
  // Use $global_variable to do something.
}

案例2:

$closure = function() {
  global $global_variable; 
  // Use $global_variable to do something.
}

2 个答案:

答案 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可以获得更多控制权。所以这取决于你的需求。