为什么我必须在PHP中递归匿名函数中作为参考传递匿名函数?

时间:2013-02-25 08:26:10

标签: php recursion reference aggregate-functions

使用:

 $t = function($x,$y) use (&$t){
...
}

不起作用:

 $t = function($x,$y) use ($t){
...
}

为什么我必须将函数本身作为参考传递?

2 个答案:

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

递归函数必须反复访问同一资源,这比复制值更有效。