在 PHP 中,差异是啥: $var2=$var1 ; $var2=&$var1; [复制]

Posted

技术标签:

【中文标题】在 PHP 中,差异是啥: $var2=$var1 ; $var2=&$var1; [复制]【英文标题】:In PHP, what's the diff : $var2=$var1 ; $var2=&$var1; [duplicate]在 PHP 中,差异是什么: $var2=$var1 ; $var2=&$var1; [复制] 【发布时间】:2011-04-02 00:40:21 【问题描述】:

可能重复: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 ?

【问题讨论】:

【参考方案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;

【讨论】:

【参考方案2】:

运算符 =& 适用于引用而不是值。 在这种情况下,$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。文档。

【讨论】:

"如果你将引用分配给在函数内声明为全局的变量,则该引用将仅在函数内可见。你可以使用 $GLOBALS 数组来避免这种情况。"检查我给你的链接,有一个关于全局变量的完整部分。【参考方案3】:

当您执行$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"!

【讨论】:

哇,克隆变量。整洁的。不知道。 "PHP 使 $var2 指向 $var1 - 这意味着您最终会得到两个指向完全相同的变量。"你在自相矛盾;只有第二部分是真的。

以上是关于在 PHP 中,差异是啥: $var2=$var1 ; $var2=&$var1; [复制]的主要内容,如果未能解决你的问题,请参考以下文章

JS,这是啥语法? “var3 =(var1 > var2)?var1:var2”[重复]

参数置换变量

通过 var1 & var2 设置默认查询

PHP-函数小记

php

Python:字符串