一旦我在函数内部传递一个变量作为参考,如果我以后访问它,它仍然是一个引用还是..?
示例:
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();
)
答案 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,直到值发生变化。然后它是一个新的副本。
这里有很多检测参考的方法,也许会检查一些。 (为什么你需要这样做是未知的,但它仍然存在)。
答案 3 :(得分:1)
发送到two()的变量是一个新元素。如果要访问变量的引用,请使用两个(& $ variable);
在回答第二个查询时,没有标准函数可以测试变量是否为引用,但是,下面的链接应该为您提供一些指针,以检查变量是否为引用。
答案 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。