2010-05-15 91 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