2012-11-12 35 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