在学习PHP中的匿名函数时,我发现了这个:
使用use语法,匿名函数可以使用其封闭作用域中定义的变量。
例如:
$test = array("hello", "there", "what's up");
$useRandom = "random";
$result = usort($test, function($a, $b) use ($useRandom){
if($useRandom=="random")
return rand(0,2) - 1;
else
return strlen($a) - strlen($b);
}
);
为什么我不能像下面这样让$useRandom成为全局变量呢?
$test2 = array("hello", "there", "what's up");
$useRandom = "random";
$result = usort($test, function($a, $b){
global $useRandom;
if($useRandom=="random")
return rand(0,2) - 1;
else
return strlen($a) - strlen($b);
}
);
这两种方法有什么区别?
$useRandom
不是全局的。在第二个示例中,你将变量设为全局。 - Jay Blancharduse
仍然绑定在当前作用域。global
就是真正的全局。 - PeeHaaglobal
常常是有效的,但仍然存在一些众所周知的问题,例如库之间的名称冲突。 - arkascha