PHP节点没有通过引用传递

时间:2012-11-12 17:49:45

标签: php dom nodes

我在一个类中有一堆dom操作函数。 其中一个函数为特定节点分配唯一ID。

$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]');

返回了带有ID的正确数量的项目。当我编辑它时,该节点不在DOM树中。

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

使用参考语法没有任何影响。

最奇怪的部分是get elementById()没有在dom中返回一个节点。除了没有parentNode之外,它具有所有正确的属性。

FIX - 不回答:

我刚使用xpath而不是我的引用或getElementById()。

1 个答案:

答案 0 :(得分:3)

使用referenceexlicity:

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

修改$current_node