0

它们之间有什么区别吗?

$something = function($var) { 

});

$something = function() use ($var) {

});
4

2 回答 2

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"
于 2013-09-21T17:30:03.850 回答
1

第一个是带单个参数的函数,另一个是不带参数并关闭$var父作用域中变量值的函数。

于 2013-09-21T17:23:51.800 回答