我试图找出$a=&$b
和之间的区别$a=$b
。我知道&
使变量成为参考变量。但是下面的测试给了我同样的结果。谁能解释其中的区别?谢谢。
$a=5;
$b=6;
$a=&$b;
echo $a; //6
$a=5;
$b=6;
$a=$b;
echo $a; //6
我试图找出$a=&$b
和之间的区别$a=$b
。我知道&
使变量成为参考变量。但是下面的测试给了我同样的结果。谁能解释其中的区别?谢谢。
$a=5;
$b=6;
$a=&$b;
echo $a; //6
$a=5;
$b=6;
$a=$b;
echo $a; //6
首先:你几乎不需要引用,如果可以的话,避免使用它们的混淆。
$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
function changeVariableWithReference(&$var)
{
$var += 1;
}
function changeVariableWithoutReference($var)
{
$var += 1;
}
$a = 5;
$b = 5;
changeVariableWithReference($a);
changeVariableWithoutReference($b);
print $a . ' ' . $b;
?>
如果您遵循以下代码,您将得到答案(我添加了一些行)
$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
$a = $b
和之间的区别在于$a =& $b
,对于前一个赋值运算符,值被复制,而对于后一个引用运算符,变量$a
引用与 相同的值$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"
当您在赋值中使用 & 时,您可以认为新变量是原始变量的“捷径”。如果您不使用 &,它将是原件的“副本”。
$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.
可以通过简单的图表轻松解释参考。当您使用按值复制( $a = $b
) 时,会发生类似的情况:
$a = 1000;
# $a -----> 1000
$b = $a;
# $a -----> 1000
# $b -----> 1000
# (two "pieces of memory" has been used)
但是,当您创建对$a
named的新引用时$b
,会发生类似的事情:
$a = 1000;
$b =& $a;
# $a --\
# --> 1000
# $b --/
# (one "piece of memory" has been used but two different names ($a, $b) point on it)