Php 理解参考文献的使用

Php 理解参考文献的使用,php,reference,Php,Reference,我想,我了解参考资料的作用。 但现在我遇到了一个例子,它无论如何都无法理解 我看到了一个有趣的脚本,但我不明白他为什么在这个脚本中使用&。 下面是脚本的一部分 foreach ($nodeList as $nodeId => &$node) { if (!$node['id_parrent'] || !array_key_exists($node['id_parrent'], $nodeList)) { $tree[] = &$node;

我想,我了解参考资料的作用。 但现在我遇到了一个例子,它无论如何都无法理解

我看到了一个有趣的脚本,但我不明白他为什么在这个脚本中使用
&
。 下面是脚本的一部分

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=任何更改
,那么为什么要使用=&$node而不是$node呢

也许你能帮我理解


感谢

$tree[]=&$node

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


如果不使用引用,树和子数组将只包含节点的副本。

$tree[]=&$node

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

如果不使用引用,树和子数组将只包含节点的副本

如果他没有对$node进行任何更改,为什么需要在这里使用引用?没有什么比$node=任何更改更好的了,那么为什么要使用=&$node而不是$node呢

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

如果他没有对$node进行任何更改,为什么需要在这里使用引用?没有什么比$node=任何更改更好的了,那么为什么要使用=&$node而不是$node呢


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

我建议您看看:

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

示例代码:

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";
}
函数按值传递($param){
push_数组($param,4,5);
}
$ar=数组(1,2,3);
按价值传递(ar);
foreach($ar作为$elem){
打印“
$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";
}
函数按引用传递(&$param){
push_数组($param,4,5);
}
$ar=数组(1,2,3);
按参考传递($ar);
foreach($ar作为$elem){
打印“
$elem”; }

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

我建议您看看:

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

示例代码:

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";
}
函数按值传递($param){
push_数组($param,4,5);
}
$ar=数组(1,2,3);
按价值传递(ar);
foreach($ar作为$elem){
打印“
$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";
}
函数按引用传递(&$param){
push_数组($param,4,5);
}
$ar=数组(1,2,3);
按参考传递($ar);
foreach($ar作为$elem){
打印“
$elem”; }

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

理解不足。非常感谢(这是一件非常有用的事情,参考资料:)这是他们在
C
语言课程中教你的东西。要求您使用C数组创建链接列表;这是相同的,除了存储对prev/next的引用之外,您存储的是children.Undermand的引用。非常感谢(这是一件非常有用的事情,参考资料:)这是他们在
C
语言课程中教你的东西。要求您使用C数组创建链接列表;除了存储对prev/next的引用之外,这是相同的。实际上,从PHP5开始,对象就不再是这样了。事实上,在PHP5.3中,整个调用时间传递引用构造都是不推荐的。事实上,从PHP5开始,对象就不再是这样了。事实上,PHP5.3中无论如何都不推荐使用整个调用时间传递引用结构。