看看这段代码:
$str = implode(', ', array_map(function($var1) use ($var2) { /* code */ }, $arr));
如您所见,我已使用USE
关键字在函数中导入var2
。好的都好。我可以在没有USE
的情况下做到这一点。像这样:
$str = implode(', ', array_map(function($var1. $var2) { /* code */ }, $arr));
那我什么时候应该使用USE
?它有什么特别的优势吗?
答案 0 :(得分:3)
use
将变量从一个范围传递到另一个范围。在使用匿名函数时非常有用,这些函数无法访问其范围之外的变量(父作用域)。请参阅以下链接中的示例#3。
http://php.net/manual/en/functions.anonymous.php
至于你的例子,我猜你在匿名函数中使用2个参数时会/应该一直缺少参数警告消息。你的第二个例子基本上是这样的:
function myFunction($var1, $var2)
{
// myFunction logic
}
$arr = array('string1', 'string2', 'string3');
$temp = array();
foreach ($arr as $value) {
$temp[] = myFunction($value); // produces an e_warning since myFunction expects 2 arguments
}
$str = implode(', ', $temp);
答案 1 :(得分:1)
使用use
的原因是在函数定义时设置变量值,而不是在调用函数时设置变量值。例如,
$var1 = 1;
$var2 = 2;
$fun1 = function($var1) use ($var2) { return $var1 + $var2; };
$fun2 = function($var1, $var2) { return $var1 + $var2; };
echo $fun1(3);
// prints 5
echo $fun2(3,4);
// prints 7