【问题标题】:php passing by reference differencephp按引用传递差异
【发布时间】:2012-03-03 12:07:08
【问题描述】:

我有一个简单的问题。在函数参数中通过引用传递变量是否有区别,例如:

function do_stuff(&$a)
{
    // do stuff here...
}

并在函数内部执行如下操作:

function do_stuff($a)
{
    $var = &$a;
    // do stuff here...
}

使用这两者有什么区别(如果有的话)?另外,任何人都可以给我一个很好的教程来解释通过引用传递吗?我似乎无法 100% 理解这个概念。

谢谢

【问题讨论】:

    标签: php reference pass-by-reference


    【解决方案1】:

    在第二个函数中,传递给函数的$a 是传入参数的副本,(除非$a 是一个对象),因此您正在使$var 引用内部的$a函数,但它仍将与传递给函数的变量分开。

    假设您使用的是最新版本的 PHP,对象也会通过引用自动传递,因此可能会有所不同。

    【讨论】:

    • “对象”是通过引用访问的,引用是按值传递的,除非你明确地按引用传递
    【解决方案2】:

    它们根本不相等。在第二个版本中,您正在创建对未定义变量$a 的引用,导致$var 指向相同的空值。在第二个版本中对 $var 和 $a 所做的任何事情都不会影响函数之外的任何内容。

    在第一个版本中,如果你在函数内部更改 $a,新值将在函数返回后出现在外部。

    【讨论】:

      【解决方案3】:

      这里有一组示例,您可以了解每个问题的结果。 我还添加了第三个函数,它结合了您的两个问题,因为它也会产生不同的结果。

      function do_stuff(&$a)
      {
          $a = 5;
      }
      
      function do_stuff2($a)
      {
          $var = &$a;
          $var = 3;
      }
      
      function do_stuff3(&$a)
      {
          $var = &$a;
          $var = 3;
      }
      
      $a = 2;
      do_stuff($a);
      echo $a;
      echo '<br />';
      
      $a = 2;
      do_stuff2($a);
      echo $a;
      echo '<br />';
      
      $a = 2;
      do_stuff3($a);
      echo $a;
      echo '<br />';
      

      【讨论】:

        【解决方案4】:

        在您的第一个示例中,如果您以任何方式修改函数内部的$a,函数外部的原始值也将被修改。

        在您的第二个示例中,无论您对 $a 或其引用 $var 做什么,都不会修改函数外部的原始值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-05
          • 2016-11-14
          • 2010-09-05
          • 2011-05-29
          相关资源
          最近更新 更多