我想,我明白了什么参考。 但现在我遇到了一个无法理解的例子。
我看到了一个有趣的脚本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? p>
也许你会帮助我理解?
由于
答案 0 :(得分:2)
$tree[] = &$node;
当你这样做时,树数组将存储与节点列表中相同节点的引用。如果从节点列表中更改节点,它也将在树中更改,反之亦然。这同样适用于children数组。
不使用引用,tree和children数组只包含节点的副本。
答案 1 :(得分:1)
如果他没有对$ node进行任何更改,为什么需要在这里使用引用?没有像$ node =任何变化,所以为什么要使用=& $ node,而不是$ node? p>
因为使用引用还可以避免复制变量,从而节省内存和(通常是可忽略的维度)性能。
答案 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)不会操作传递的变量的副本,而是实际的变量本身。