PHP 引用傳遞
一、引用是什麼
在 PHP 中引用意味着用不同的名字訪問同一個變量內容。這並不像 C 的指針:例如你不能對他們做指針運算,他們並不是實際的內存地址…… 查看引用不是什麼瞭解更多信息。 替代的是,引用是符號表別名。注意在PHP 中,變量名和變量內容是不一樣的, 因此同樣的內容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——變量名是目錄條目,而變量內容則是文件本身。引用可以被看作是 Unix 文件系統中的硬鏈接。
二、引用做什麼
PHP 的引用允許用兩個變量來指向同一個內容
舉例如下:
function Reference(&$str){
$str .= '我是引用';
echo $str //輸出 我是外界字符我是引用
}
$string = '我是外界字符';
Referenc($string);
var_dump($string); //輸出 我是外界字符我是引用
string 改變了地址,與str地址的內容是一致的,兩個變量來指向同一個內容
$array = array(1,2,3);
foreach($array as &$value){
$value *=2;
}
var_dump($array); //輸出 array(3) { [0]=> int(2) [1]=> int(4) [2]=> &int(6) }
接下來
foreach($array as $value){
var_dump($value); //輸出 2,4,4
}
看到這裏大家應該就有個疑問,爲什麼會出現這種情況呢。
在第一次運行之後的數組中,最後一位元素前面有 & 引用伏。
這也就導致了在第二次循環的時候,value的變量還是在array的第三個元素,也就是6上面。
foreach 會把數組中對應的元素賦值給as後面的變量,這樣的話,在第二次foreach中,循環第一次的時候,把2賦值給了value,6就變成了2,循環完的第一個數組也就變成了[2,4,2],在第二次的循環中把4賦值給了value,2就變成了4,成爲了[2,4,4],第三次循環的時候,第三個數就是4,再去賦值還是4,然後還是2,4,4