5

我试图找出$a=&$b和之间的区别$a=$b。我知道&使变量成为参考变量。但是下面的测试给了我同样的结果。谁能解释其中的区别?谢谢。

 $a=5;
 $b=6;

 $a=&$b;
 echo $a; //6


 $a=5;
 $b=6;

 $a=$b;
 echo $a; //6
4

6 回答 6

14

首先:你几乎不需要引用,如果可以的话,避免使用它们的混淆。

$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
于 2010-07-24T17:11:20.090 回答
1

当您将函数作为参数发送时,它在函数中更重要。

例如:

<?php
function changeVariableWithReference(&$var)
{
  $var += 1;
}

function changeVariableWithoutReference($var)
{
  $var += 1;
}

$a = 5;
$b = 5;

changeVariableWithReference($a);
changeVariableWithoutReference($b);

print $a . ' ' . $b;

?>
于 2010-07-24T17:13:10.733 回答
1

如果您遵循以下代码,您将得到答案(我添加了一些行)

$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

于 2010-07-24T17:14:54.207 回答
1

$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"
于 2010-07-24T17:15:17.487 回答
1

当您在赋值中使用 & 时,您可以认为新变量是原始变量的“捷径”。如果您不使用 &,它将是原件的“副本”。

$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.
于 2010-07-24T18:07:04.650 回答
1

可以通过简单的图表轻松解释参考。当您使用按值复制( $a = $b) 时,会发生类似的情况:

$a = 1000;

# $a -----> 1000

$b = $a;

# $a -----> 1000
# $b -----> 1000
# (two "pieces of memory" has been used)

但是,当您创建对$anamed的新引用时$b,会发生类似的事情:

$a = 1000;
$b =& $a;

# $a --\
#       --> 1000
# $b --/
# (one "piece of memory" has been used but two different names ($a, $b) point on it)
于 2010-07-24T18:16:56.740 回答