2016-06-20 39 views
3

是很困難的話我想要做的解釋,所以我提供了一個小例子,看評論:通過改變從一個函數返回的參考變化等全球性陣列值

$g = array( 
    'a' => array(1, 2, 3), 
    'b' => array(4, 5, 6) 
); // A global array 

function &search($key) { 
    global $g; 
    return $g[$key]; 
} 

$a = search('b'); // Now $a should be a reference to $g['b'], right? 

$a[2] = 666; 
print_r($a); // Ok changed 
print_r($g); // Why not changed? 

上測試PHP 5.6.4。

我想要做的原因是搜索功能在我的用例中顯然更復雜(不僅僅是一個關鍵索引!),並且在找到結果後,便於處理結果:原始數組嵌套在各個級別。

+1

因爲你的價值迴歸,而不是參考;所以修改返回的值不會修改全局值 –

+0

@MarkBaker爲什麼你說我按價值回報?不應該通過引用返回'&search'? –

回答

4

the manual

注:和參數傳遞不同,這裏必須在兩個地方使用& - 表示要通過引用,不是副本返回,並表示參考結合,應該爲$ myValue完成而不是通常的分配。

你的代碼只是需要一個額外的符號(參考「綁定」一個上面提到的),具體如下:

$a =& search('b'); 
+0

Greeeeeat!謝謝!我強硬只要在函數聲明中使用'&'就足夠了! –

+0

我放棄了這一點,當涉及到PHP。這種方式我永遠無法獲得參考。例如,爲什麼做'功能和搜索($ key){}'的目的?在這種情況下,這個符號是做什麼的? – samayo

相關問題