在PHP中,差异是什么:$ var2 = $ var1; $ VAR2 =安培; $ VAR1;

时间:2010-08-21 10:53:43

标签: php

  

可能重复:
  Reference assignment operator in php =&

$var2 = $var1;
$var2 = &$var1;

示例:

$GLOBALS['a']=1;


function test()
{
    global $a;
    $local=2;
    $a=&$local;
}


test();

echo $a;

为什么$ a仍然是1?

3 个答案:

答案 0 :(得分:13)

运营商=&使用引用而不是值。 在这种情况下,$var2=$var1$var2=&$var1之间的区别是可见的:

$var1 = 1;
$var2 = $var1;
$var1 = 2;
echo $var1 . " " . $var2; // Prints '2 1'

$var1 = 1;
$var2 =& $var1;
$var1 = 2;
echo $var1 . " " . $var2; // Prints '2 2'

当你使用=&运算符你不要说$ var2“现在取$ var1的值”,而你会说“你的值将存储在与$ var1的值完全相同的位置”。 因此,只要您更改$ var1或$ var2的内容,就会看到两个变量的修改。

有关更多信息,请查看PHP.net

编辑: 对于全局部分,您需要使用$GLOBALS["a"] =& $local; Cf.文档。

答案 1 :(得分:5)

执行$var2 = $var1时,PHP会创建$var1的副本,并将其放在$var2中。但是,如果您执行$var2 = &$var1,则不会进行复制。相反,PHP使$var2指向$var1 - 这意味着你最终会得到两个指向完全相同的变量。

一个例子:

$var1 = "Foo";
$var2 = $var1; // NORMAL assignment - $var1's value is copied into $var2
$var3 = &$var1; // NOT normal copy!

echo $var2; // Prints "Foo".
echo $var3; // Also prints "Foo".

$var1 = "Bar"; // Change $var1.

echo $var2; // Prints "Foo" as before.
echo $var3; // Now prints "Bar"!

答案 2 :(得分:1)

global $a;

这相当于:

$a = &$GLOBALS['a'];

当您为$a分配新参考时,您正在更改$a而不是$GLOBALS['a']

您希望在下面输出什么?

$GLOBALS['a']=1;

function test()
{
    $a='foobar';          // $a is a normal variable
    $a=&$GLOBALS['a'];    // same as: global $a;
    $local=2;
    $a=&$local;
}

test();

echo $a;