在什么情况下使用带有闭包的use
关键字更有益,然后将其他参数传递给闭包?
示例#1:
$myClosure = function($var1, $var2) use ($var3){
//Some code
}
示例#2:
$myClosure = function($var1, $var2, $var3){
//Some code
}
就像它可能取决于的所有事情一样,但我认为两者之间没有任何功能差异。任何人都可以建议一个例子比另一个例子更受欢迎的情况或例子吗?
答案 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);
在闭包中使用带有预定义参数的变量是一种很好的方法,它不能访问闭包之外的变量