使用:
$t = function($x,$y) use (&$t){
...
}
不起作用:
$t = function($x,$y) use ($t){
...
}
为什么我必须将函数本身作为参考传递?
答案 0 :(得分:2)
也许这会有所帮助:
$f = 42;
$f = function() use ($f)
{
var_dump($f);
};
$f();
输出42。
在定义函数并将其分配给use()
之前,$f
被命中。因此,如果您不通过引用传递,则您将访问创建函数之前的变量。在这种情况下,42。在您的情况下,为NULL。
通过传递引用,您将在调用函数时获得$f
的值,这将是您所期望的匿名函数(假设您没有重新分配$ f)。 / p>
答案 1 :(得分:0)
传递引用变量意味着您正在访问该范围内的相同变量。
引用变量指向先前创建的同一变量。
示例强>
<?php
$a = 10;
$b = &$a;
function change_b($pass)
{
$b = $pass++;
}
echo $b."<br />";
change_b(&$a);
echo $b;
?>
上面的代码将输出10然后输出11。
递归函数必须反复访问同一资源,这比复制值更有效。