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