函数($ var)和函数()使用($ var)之间有什么区别吗?

时间:2013-09-21 17:21:29

标签: php closures

这些之间有什么不同吗?

$something = function($var) { 

});

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

});

2 个答案:

答案 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的值。