PHP:是否可以通过 ref 传递 xml 节点以运行并进行更改



我希望通过 ref 将 xml 节点传递给函数,并在函数内进行更改。但似乎节点的值无法以这种方式更改。

例:

<?php
$str = '<data><name>foo</name></data>';
$xml = simplexml_load_string($str);
test($xml->name);
echo $xml->name; //I expect it should be 'bar', but it is still 'foo'.
function test(&$node){  //it makes no difference if a '&' is added or not.
    $node = 'bar';
}
?>

或者如果我在这里弄错了?

你在那里犯了一个小错误:你正在将字符串'bar'分配给变量引用$node,即用字符串替换到目前为止由该变量命名的对象(id)值。相反,您需要在该变量中保留对象,并且仅更改该SimpleXMLElement的节点值。这是通过所谓的自我引用来完成的:

function test(&$node) {
    $node[0] = 'bar';
}

如您所见,这可以通过在该节点上添加[0]而有所不同。实际上,这里不需要&,因为对象不需要通过引用传递。此外,您还应该提示类型:

function test(SimpleXMLElement $node) {
    $node[0] = 'bar';
}

就是这样,请参阅演示:https://eval.in/108589 .

为了更好地理解这个 SimpleXMLElement 自我引用背后的魔力,请继续阅读以下答案,该答案是关于仅通过节点的变量删除节点,这类似于设置它的值。请注意,SimpleXMLElement有魔法的,所以乍一看事情可能并不直观。

相关内容

  • 没有找到相关文章

最新更新