Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:是否可以通过ref将xml节点传递给函数并进行更改?_Php_Xml_Simplexml_Byref - Fatal编程技术网

PHP:是否可以通过ref将xml节点传递给函数并进行更改?

PHP:是否可以通过ref将xml节点传递给函数并进行更改?,php,xml,simplexml,byref,Php,Xml,Simplexml,Byref,我希望通过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

我希望通过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';
}
?>
名称);
echo$xml->name//我想它应该是“吧”,但它仍然是“福”。
函数测试(&$node){//添加或不添加“&”没有区别。
$node='bar';
}
?>

或者如果我在这里犯了错误?

您在那里犯了一个小错误:您正在将字符串
'bar'
分配给变量引用
$node
,这将用一个字符串替换迄今为止由该变量命名的对象(id)值。相反,您需要将对象保留在该变量中,并且只更改该
simplexmlement
的节点值。这是通过所谓的自我参照来实现的:

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

function test(SimpleXMLElement $node) {
    $node[0] = 'bar';
}
就这样,请看演示:

为了更好地理解此处SimpleXMLElement自引用背后的魔力,请继续阅读类似于设置其值的。请注意,
simplexmlement
与magic一起使用,因此乍一看事情可能不是直观的

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