2010-06-27 29 views
1

我想,我明白什麼是參考文獻。 但現在我遇到了一個無法理解的例子。瞭解參考用法

我看到一個有趣的腳本here,但爲什麼他在這個腳本中使用&我無法理解。 這裏是腳本

foreach ($nodeList as $nodeId => &$node) 
{ 
    if (!$node['id_parrent'] || !array_key_exists($node['id_parrent'], $nodeList)) 
    { 
     $tree[] = &$node; 
    } 
    else 
    { 
     $nodeList[$node['id_parrent']]['children'][] =&$node; 
    } 
} 

的一部分,如果他不做出任何改變$節點上,爲什麼需要在這裏使用的參考? 有沒有像$node = any changes,所以爲什麼使用= & $節點,而不是$節點?

也許你會幫助我理解?

感謝

+0

undertanded。非常感謝(這是非常有用的東西,參考:) – Simon 2010-06-27 13:58:53

+0

這是他們在'C'語言課程中教你的東西。你被要求用C數組創建一個鏈接列表;這是相同的,除了不是存儲對prev/next的引用來存儲子對象的引用。 – 2012-08-18 09:19:20

回答

2

$tree[] = &$node;

當你像這樣做,樹陣將在同一節點引用存儲在節點列表。如果您從節點列表中更改節點,它也會在樹中更改,反之亦然。這同樣適用於兒童陣列。

不使用引用,tree和children數組只包含節點的副本。

1

如果他沒有對$ node進行任何更改,爲什麼需要在這裏使用引用?沒有什麼像$ node =任何更改,爲什麼使用= & $ node,而不是$ node?

因爲使用引用還可以避免複製變量,從而節省內存和(通常可忽略的維度)性能。

+0

事實上,對於PHP 5來說,情況已不再是這種情況。 實際上,整個調用時傳遞引用構造在PHP 5.3中都被棄用了。 – user268396 2010-06-27 14:10:28

+0

@user'$ node'是一個數組。 – 2010-06-27 14:13:04

1

我建議你看看:

PHP: Pass by reference vs. Pass by value

這很容易說明爲什麼你需要引用(&)傳遞變量。採取

示例代碼:

function pass_by_value($param) { 
    push_array($param, 4, 5); 
} 

$ar = array(1,2,3); 

pass_by_value($ar); 

foreach ($ar as $elem) { 
    print "<br>$elem"; 
} 

上述打印1,2中的代碼,3.這是因爲陣列作爲值傳遞。

function pass_by_reference(&$param) { 
    push_array($param, 4, 5); 
} 

$ar = array(1,2,3); 

pass_by_reference($ar); 

foreach ($ar as $elem) { 
    print "<br>$elem"; 
} 

上述打印1,2,3,4中的代碼,5.這是因爲陣列作爲引用傳遞,這意味着函數(pass_by_reference)不操作傳遞的變量的副本,但實際的變量本身。