【问题标题】:Reference or variable?参考还是变量?
【发布时间】:2011-10-27 06:11:33
【问题描述】:

一旦我在函数内部传递一个变量作为引用,如果我以后访问它,它仍然是引用还是..?

例子:

function one(){
    $variables = array('zee', 'bee', 'kee');
    $useLater =& $variables;
    two($variables);
}

function two($reference){
    foreach($reference as $variable){
        echo 'reference or variable, that is the question...';
    }
}

在函数two(); 中,这里的变量是对先前设置的 $variables 的引用还是创建了一个新元素(我猜是在内存中..)?

另外,有没有办法检查变量是否通过引用传递? (如:is_reference();)

【问题讨论】:

  • 无论答案是什么:在调用时通过引用传递已被弃用。
  • @Felix,现在“通过引用”的替代品是什么?
  • 你可以很容易地测试这个,OP。
  • @Tom:阅读文档。
  • 老实说,我在这里看不到任何“通过引用传递”。这里是$ref = &$var; f($ref);,不是f(&var);。

标签: php variables reference


【解决方案1】:

自己试试吧:

<?php

$variables = array('zee', 'bee', 'kee');
one($variables);

foreach($variables as $variable2){
        echo "original: ".$variable2."<br>";
    }


function one(&$variables){

    $useLater =& $variables;
    two($variables);

    foreach($variables as $variable2){
        echo "function one: ".$variable2."<br>";
    }

}

function two(&$reference){
    foreach($reference as $variable){
        echo "function two: ".$variable."<br>";
    }
    $reference[0] = 'lee';
}

?>

现在省略 & 符号,看看会发生什么。每次您打算如何传递相关变量时,您都需要明确告诉 PHP。

【讨论】:

    【解决方案2】:

    如果您使用&amp;$foo 明确地通过引用传递变量,则只能通过引用传递变量(在当前版本的PHP 中)。

    同样,在将变量声明为新变量时,例如$foo = $bar,$foo 将是对 $bar 的引用,直到值发生变化。然后它是一个新副本。

    这里有很多检测参考的方法,不妨看看其中的一些。 (为什么你需要这样做是未知的,但它仍然存在)。

    http://www.php.net/manual/en/language.references.spot.php

    【讨论】:

      【解决方案3】:

      变量。看:

      function one(){
          $variables = array('zee', 'bee', 'kee');
          $useLater =& $variables;
          two($variables);
          var_dump($variables);
      }
      
      function two($reference){
          $reference = array();
      }
      

      给了

      array(3) { [0]=> string(3) "zee" [1]=> string(3) "bee" [2]=> string(3) "kee" }
      

      所以在two() 中更改它不会在one() 中更改它,所以它是可变的。

      【讨论】:

        【解决方案4】:

        如果你想让函数的参数成为引用,你也必须在那里写一个&。

        唯一的例外应该是对象。

        【讨论】:

          【解决方案5】:

          如上所述,函数二将使用$refernce 的新副本。

          要使用原始变量,您需要像这样定义函数二:

          function two(&$ref) {
            //> Do operation on $ref;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多