分配变量时“=”和“=&”有啥区别?
Posted
技术标签:
【中文标题】分配变量时“=”和“=&”有啥区别?【英文标题】:What is the difference between “=” and “=&” when assigning variables?分配变量时“=”和“=&”有什么区别? 【发布时间】:2011-03-20 13:18:45 【问题描述】:我正在尝试找出$a=&$b
和$a=$b
之间的区别。
我知道&
使变量成为参考变量。但是下面的测试给了我同样的结果。谁能解释其中的区别?谢谢。
$a=5;
$b=6;
$a=&$b;
echo $a; //6
$a=5;
$b=6;
$a=$b;
echo $a; //6
【问题讨论】:
我还不能投票给你们……但第一个答案让我接受了。非常感谢。 what do "=&" / "&=" operators in php mean?的可能重复 【参考方案1】:首先:你几乎不需要引用,如果可以的话,避免使用它们的混淆。
$a=5; //assign value to a
$b=&$a; //make $b a reference to $a
$b=6; //assigning a value to $b assigns the same value to $a (as they point to the same location
echo $a; //6
$a=5; //assign a value to a
$b=$a; //set $b to the value of $a
$b=6; //set $b to another value leaves $a at it's original value
echo $a; //5
【讨论】:
只是想再次感谢您对 PHP Simple html Dom Parser 的回答,知道您可以将函数存储在变量中将对我未来的项目有很大帮助。【参考方案2】:当您将函数作为参数发送时,它在函数中更重要。
例如:
<?php
function changeVariableWithReference(&$var)
$var += 1;
function changeVariableWithoutReference($var)
$var += 1;
$a = 5;
$b = 5;
changeVariableWithReference($a);
changeVariableWithoutReference($b);
print $a . ' ' . $b;
?>
【讨论】:
【参考方案3】:你会得到答案,如果你按照下面的代码(我已经添加了一些行)
$a=5;
$b=6;
$a=&$b;
echo $a; //6
$b = 8;
echo $a; //8
$a=5;
$b=6;
$a=$b;
echo $a; //6
$b = 20;
echo $a; //6
用&
简单,变量$a
指向变量$b
没有&
, $b
只需复制到$a
【讨论】:
【参考方案4】:$a = $b
和$a =& $b
的区别在于,前者assignment operator 是复制值,而后者引用运算符是变量$a
refers to the same value as $b
。
读取值时看不到任何区别,但写入值时会看到:
$var = 123;
$copyOfVar = $var;
$referenceToVar =& $var;
$copyOfVar = 456;
echo 'var='.$var.'; copyOfVar='.$copyOfVar;
// "var=123; copyOfVar=456"
$referenceToVar = 456;
echo 'var='.$var.'; referenceToVar='.$referenceToVar;
// "var=456; referenceToVar=456"
【讨论】:
【参考方案5】:当您在赋值中使用 & 时,您可以认为新变量是原始变量的“捷径”。如果您不使用 &,它将是原件的“副本”。
$a = 5;
$b =& $a; // this $b is like a shortcut to $a. Change $b and $a will change too
$a = 5;
$b = $a; // this time, $b will be 5 - but not a shortcut to $a. Change $b and $a will still be 5.
【讨论】:
【参考方案6】:可以通过简单的图表轻松解释参考。当您使用 按值复制 ($a = $b
) 时,会发生类似的情况:
$a = 1000;
# $a -----> 1000
$b = $a;
# $a -----> 1000
# $b -----> 1000
# (two "pieces of memory" has been used)
但是,当您创建一个名为 $b
的对 $a
的新引用时,就会发生类似的事情:
$a = 1000;
$b =& $a;
# $a --\
# --> 1000
# $b --/
# (one "piece of memory" has been used but two different names ($a, $b) point on it)
【讨论】:
以上是关于分配变量时“=”和“=&”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Malloc 和 new 运算符分配内存有啥区别? [复制]