分配变量时“=”和“=&”有啥区别?

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

&amp;简单,变量$a指向变量$b

没有&amp;, $b 只需复制到$a

【讨论】:

【参考方案4】:

$a = $b$a =&amp; $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 运算符分配内存有啥区别? [复制]

Malloc 和 new 运算符分配内存有啥区别? [复制]

Delphi中赋值(:=)与分配(Assign)有啥区别?

分配的内存和保留的内存有啥区别?

引用传递和动态内存分配之间有啥区别[关闭]

c和c ++中的动态内存分配和堆有啥区别