2010-05-15 92 views
9

如果我制作参考变量的副本。新变量是一个指针还是它保存指针所指的变量的值?PHP:制作参考变量的副本

+0

引用不是指针。请参阅http://php.net/manual/en/language.references.arent.php – Artefacto 2010-05-15 13:06:55

+0

有时您必须使用它们,例如实施offsetget时。尽管PHP中的引用毫无疑问是一团糟。 – Artefacto 2010-05-15 13:49:25

回答

6

它拥有价值。如果你想指出,使用&运营商复制其他参考:

 
$a = 'test'; 
$b = &$a; 
$c = &$b; 
+0

不要说“点”。他会认为$ a,$ b和$ c之间有一些区别(如指针和指针)。 – Artefacto 2010-05-15 13:51:24

5

让我们做一个简单的测试:

<?php 

$base = 'hello'; 
$ref =& $base; 
$copy = $ref; 

$copy = 'world'; 

echo $base; 

输出为hello,因此$copy不是%base参考。

+2

这应该是预期的 - '$ ref'作为'$ base'的引用的地方在于'$ copy = $ ref'应该和'$ copy = $ base'具有完全相同的效果。 – Tgr 2010-05-15 13:06:56

+0

这让我更好地理解了参考。由于某种原因,我虽然复制一个引用,你可以'$ copy = $ ref;'。现在我明白这就像一个解引用,并复制引用参考的数据。我认为使用C指针会让你感到困惑,因为你必须手动解引用。 – Lightbulb1 2014-07-02 13:46:04

+0

@ Lightbulb1:这是因为PHP的引用比C/C++指针更像C++引用。 ;) – Crozin 2014-07-02 14:22:35

-1

让我黑暗与本例中,水:

$a = array (1,2,3,4); 
foreach ($a as &$v) { 

} 
print_r($a); 

foreach ($a as $v) { 
    echo $v.PHP_EOL; 
} 
print_r($a); 

输出:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
) 

1 
2 
3 
3 

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 3 
) 
+0

你可以在这里找到答案:http://stackoverflow.com/a/14854568/1353874 – miro 2015-10-22 14:03:17

+0

你的例子是**故意混淆**。在'foreach($ any作为&$ v){}'变量'$ v'后面会保存对最后一个数组元素的引用(尽管这很混乱,这是正确的行为),你应该'unset($ v)'或者保留记住'$ v'是一个参考。 ** Pro-tip:使用var_dump()代替print_r(),它将在数组中显示&引用** – 2017-02-18 20:36:55