PHP“使用”覆盖的附加参数?

时间:2016-10-22 00:22:56

标签: php closures

在什么情况下使用带有闭包的use关键字更有益,然后将其他参数传递给闭包?

示例#1:

$myClosure = function($var1, $var2) use ($var3){
//Some code
}

示例#2:

$myClosure = function($var1, $var2, $var3){
//Some code
}

就像它可能取决于的所有事情一样,但我认为两者之间没有任何功能差异。任何人都可以建议一个例子比另一个例子更受欢迎的情况或例子吗?

2 个答案:

答案 0 :(得分:1)

  

我认为两者之间没有任何功能差异。

参数由函数的调用者提供。如果是调用者并且可以提供所有必要的参数,那么基本上没有区别*。

但是,您可能正在将该函数传递到其他位置,因此您调用者并且控制传递哪些参数。这就是闭包解决的情况:您可以在不调用函数的情况下使值可用。

另见In PHP 5.3.0, what is the function "use" identifier?

*:通过use绑定的变量在定义时定义。因此,如果变量的值发生变化,则会有所不同:

$a = 1;
$b = 2;
$c = 3;

$f1 = function($a, $b) use ($c) {
  echo $a, $b, $c;
};

$f2 = function($a, $b, $c) {
  echo $a, $b, $c;
};

$c = 42;

$f1($a, $b); // 1, 2, 3
$f2($a, $b, $c); // 1, 2, 42

答案 1 :(得分:0)

假设您正在使用带有预定义参数的闭包,例如preg_replace_callback,并且您想要使用代码中其他位置的变量,那么您将使用use关键字

$myvar = "hello";
$text = "";
$text = preg_replace_callback('/regex/', function($matches) use ($myvar) {
  return $myvar . " " . $matches[1] . "!";
}, $text);

在闭包中使用带有预定义参数的变量是一种很好的方法,它不能访问闭包之外的变量