1

作品:

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

不工作:

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

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

4

2 回答 2

2

也许这会有所帮助:

$f = 42;
$f = function() use ($f)
{
  var_dump($f);
};
$f();

输出 42。

use()定义函数并将其分配给 之前命中$f。因此,如果您不通过引用传递,那么您正在访问该变量,就像它在创建函数之前一样。在这种情况下,42。在你的情况下,NULL。

通过传递引用,您将$f在调用函数时获得 ' 值,这将是您所期望的匿名函数(假设您没有重新分配 $f)。

于 2013-02-25T09:07:28.963 回答
0

传递引用变量意味着您在该范围内访问相同的变量。

引用变量指向之前创建的同一个变量。

例子

<?php

    $a = 10;

    $b = &$a;

    function change_b($pass)
    {
        $b = $pass++;
    }

    echo $b."<br />";

    change_b(&$a);

    echo $b;

?>

上面的代码将输出 10 和 11。

递归函数必须一遍又一遍地访问相同的资源,这比复制值更有效。

于 2013-02-25T08:35:27.820 回答