这些之间有什么不同吗?
$something = function($var) {
});
$something = function() use ($var) {
});
答案 0 :(得分:2)
前者是一个名为$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"
答案 1 :(得分:1)
第一个是带有单个参数的函数,另一个是不带参数的函数,并从父作用域中关闭变量$var
的值。