【发布时间】:2011-04-02 00:40:21
【问题描述】:
$var2 = $var1;
$var2 = &$var1;
例子:
$GLOBALS['a']=1;
function test()
{
global $a;
$local=2;
$a=&$local;
}
test();
echo $a;
为什么 $a 还是 1 ?
【问题讨论】:
标签: php
$var2 = $var1;
$var2 = &$var1;
例子:
$GLOBALS['a']=1;
function test()
{
global $a;
$local=2;
$a=&$local;
}
test();
echo $a;
为什么 $a 还是 1 ?
【问题讨论】:
标签: php
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;
【讨论】:
运算符 =& 适用于引用而不是值。
在这种情况下,$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。文档。
【讨论】:
当您执行$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"!
【讨论】: