参考还是变量?

时间:2011-08-15 12:39:37

标签: php variables reference

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

示例:

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();

6 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

变量。看:

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()中更改它,所以它是可变的。

答案 2 :(得分:1)

变量仅通过引用传递(在当前版本的PHP中),如果使用&$foo通过引用显式传递它。

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

这里有很多检测参考的方法,也许会检查一些。 (为什么你需要这样做是未知的,但它仍然存在)。

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

答案 3 :(得分:1)

发送到two()的变量是一个新元素。如果要访问变量的引用,请使用两个(& $ variable);

在回答第二个查询时,没有标准函数可以测试变量是否为引用,但是,下面的链接应该为您提供一些指针,以检查变量是否为引用。

PHP: check if object/array is a reference

答案 4 :(得分:0)

如果你想让函数的参数作为参考,你必须写一个&那里也是。

只有异常应该是对象。

答案 5 :(得分:0)

亲自尝试一下:

<?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';
}

?>

现在省略&amp; -sign,看看会发生什么。每次你打算如何传递有问题的变量时,你都需要明确告诉PHP。