将变量传递给函数并通过USE导入它们之间有什么区别吗?

时间:2016-06-06 22:27:01

标签: php function parameter-passing

看看这段代码:

$str = implode(', ', array_map(function($var1) use ($var2) { /* code */ }, $arr));

如您所见,我已使用USE关键字在函数中导入var2。好的都好。我可以在没有USE的情况下做到这一点。像这样:

$str = implode(', ', array_map(function($var1. $var2) { /* code */ }, $arr));

那我什么时候应该使用USE?它有什么特别的优势吗?

2 个答案:

答案 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