它们之间有什么区别吗?
$something = function($var) {
});
$something = function() use ($var) {
});
前者是具有单个参数的函数,名为$var
. 如果$var
在脚本的其他地方定义了另一个,没关系;该函数不会在其范围内(在其定义内)包含对它的引用。
例如。
$bar = 3;
function foo($bar) {
if (isset($bar)) {
echo "bar: $bar";
} else {
echo "no bar";
}
}
foo(10); // prints "bar: 10", because the function is called with the argument "10"
foo(); // prints "no bar" -- $bar is not defined inside the function scope
在后者的情况下,use $var
闭包意味着 $var 在包含范围内的定义将可以在函数内部访问,就像全局变量一样。
例如,
$bar = 3;
function foo($blee) use $bar {
if (isset($bar)) {
echo "bar: $bar";
} else {
echo "no bar";
}
if (isset($input)) {
echo "input: $input";
} else {
echo "no input";
}
}
foo(1); // prints "bar: 3, input: 1"
foo(); // prints "bar: 3, no input"
第一个是带单个参数的函数,另一个是不带参数并关闭$var
父作用域中变量值的函数。