在什么情况下,将use
关键字与闭包一起使用比将附加参数传递给闭包更有益?
示例# 1:
$myClosure = function($var1, $var2) use ($var3){
//Some code
}
例2:
$myClosure = function($var1, $var2, $var3){
//Some code
}
就像所有的事情一样,这可能要视情况而定,但我看不出两者在功能上有什么区别。谁能提出一种情况或例子,其中一个例子会优于另一个? 我看不出两者在功能上有什么区别。
参数由函数的调用者提供。如果您是调用者并且可以提供所有必要的参数,那么基本上没有区别*。
但是,您可能在其他地方传递函数,因此您是而不是调用者,并且不控制传递的参数。这就是闭包解决的问题:您可以在不调用函数的情况下使值可用。参见在PHP 5.3.0中,函数"use"是什么?标识符?.
*:通过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
假设您正在使用具有预定义参数的闭包,例如preg_replace_callback
,并且您希望在代码中使用来自其他地方的变量,您将使用use
关键字
$myvar = "hello";
$text = "";
$text = preg_replace_callback('/regex/', function($matches) use ($myvar) {
return $myvar . " " . $matches[1] . "!";
}, $text);
在具有预定义参数的闭包内使用变量是一种很好的方法,这些参数不能访问闭包外的变量