2012-11-12 45 views
3

我在課堂上有一堆dom操作函數。 其中一個功能爲特定節點分配唯一標識符。PHP節點未通過引用

$resource_info_node->setAttribute('id', 'resource_'.$this->ids); 
$details['id'] = 'resource_'.$this->ids; 
$details['node'] = $resource_info_node; 
$this->resource_nodes['resource_'.$this->ids] = $details; 
$this->ids += 1; 

後來我想查找並修改這些節點。 我曾嘗試:

$current_node = $this->resource_nodes[$id]['node']; 

當我的print_r()我覺得這個節點是原始節點的副本。 它具有原始節點的屬性,但不是DOM樹的一部分。 我得到相同的結果具有:

$this->content->getElementById($id); 

我想我基於陣列中的存儲節點引用這件事。我認爲這是一件很好的事情。即使沒有,在使用getElementByID()之後,應該已經返回了dom中的節點。

我認爲,在PHP中,所有對象都通過引用傳遞。包括DOM節點。 關於如何測試實際發生的任何想法。

編輯:

嗯,我用:

$this->xpath->query('//*[@id]'); 

這回與IDS項目的權數。當我編輯節點時,該節點不在DOM樹中。

$current_node = &$this->resource_nodes[$id]['node']; 

使用引用語法沒有影響。

最奇怪的部分是getById()沒有返回dom中的節點。除了沒有父節點之外,它具有所有正確的屬性。

FIX - 不回答:

我只是使用的XPath,而不是我的參考或的getElementById()。

回答

3

參考使用顯式:

$current_node = &$this->resource_nodes[$id]['node']; 

並修改$current_node