理解参考用法

时间:2010-06-27 13:48:35

标签: php reference

我想,我明白了什么参考。 但现在我遇到了一个无法理解的例子。

我看到了一个有趣的脚本here,但为什么他在这个脚本中使用&我无法理解。 这是脚本的一部分

foreach ($nodeList as $nodeId => &$node) 
{
    if (!$node['id_parrent'] || !array_key_exists($node['id_parrent'], $nodeList)) 
    {
        $tree[] = &$node;
    } 
    else 
    {
        $nodeList[$node['id_parrent']]['children'][] =&$node;
    }
}

如果他没有在$ node上进行任何更改,为什么需要在这里使用引用呢? 没有像$node = any changes那样的,为什么要使用=& $ node,而不是$ node?

也许你会帮助我理解?

由于

3 个答案:

答案 0 :(得分:2)

$tree[] = &$node;

当你这样做时,树数组将存储与节点列表中相同节点的引用。如果从节点列表中更改节点,它也将在树中更改,反之亦然。这同样适用于children数组。

不使用引用,tree和children数组只包含节点的副本。

答案 1 :(得分:1)

  

如果他没有对$ node进行任何更改,为什么需要在这里使用引用?没有像$ node =任何变化,所以为什么要使用=& $ node,而不是$ node?

因为使用引用还可以避免复制变量,从而节省内存和(通常是可忽略的维度)性能。

答案 2 :(得分:1)

我建议你看一下:

PHP: Pass by reference vs. Pass by value

这很容易说明为什么需要通过引用(&)传递变量。

示例代码:

function pass_by_value($param) {
  push_array($param, 4, 5);
}

$ar = array(1,2,3);

pass_by_value($ar);

foreach ($ar as $elem) {
  print "<br>$elem";
}

上面的代码打印1,2,3。这是因为数组作为值传递。

function pass_by_reference(&$param) {
  push_array($param, 4, 5);
}

$ar = array(1,2,3);

pass_by_reference($ar);

foreach ($ar as $elem) {
  print "<br>$elem";
}

上面的代码打印1,2,3,4,5。这是因为数组作为引用传递,这意味着函数(pass_by_reference)不会操作传递的变量的副本,而是实际的变量本身。

相关问题