【问题标题】: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

【问题讨论】:

标签: php variables operators assignment-operator


【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 2013-04-11
            • 2021-01-27
            • 2019-02-28
            • 1970-01-01
            • 1970-01-01
            • 2015-05-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多