Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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字符串解释为变量_Php_Xml - Fatal编程技术网

将PHP字符串解释为变量

将PHP字符串解释为变量,php,xml,Php,Xml,我有一个庞大的字符串数组,如下所示: $xml->archdesc->accessrestrict->p 这些字符串表示XML文档中可能的项。“$xml”是我使用simplexml\u load\u file()读取xml文件时创建的对象(simplexmlement)的缩写 我如何将这些解释为变量呢?我想访问文档中存在的每个字符串的值,但我似乎无法做到这一点。我尝试过使用$$格式、${}格式、eval()等等,但似乎没有任何东西能告诉我变量的内容;它们只是将我的字符串显示为

我有一个庞大的字符串数组,如下所示:

$xml->archdesc->accessrestrict->p
这些字符串表示XML文档中可能的项。“$xml”是我使用simplexml\u load\u file()读取xml文件时创建的对象(simplexmlement)的缩写

我如何将这些解释为变量呢?我想访问文档中存在的每个字符串的值,但我似乎无法做到这一点。我尝试过使用$$格式、${}格式、eval()等等,但似乎没有任何东西能告诉我变量的内容;它们只是将我的字符串显示为字符串

这些对使用对象操作符的对象不起作用吗?我必须以某种方式逃离这些吗?我有什么遗漏吗?

eval对我有用

测试代码:

$blah = new stdClass();
$blah->hello = 'hello';
$foo = '$blah->hello';
eval('echo '.$foo.';');

您也可以使用变量来实现这一点,如下所示:

$blah = new stdClass();
$blah->hello = 'hello';
$foo = 'blah->hello';
$bar = explode('->', $foo);
echo $$bar[0]->$bar[1];

请注意,在以这种方式使用字符串之前,必须修剪字符串的美元符号。

是否可以将数组改为位置

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>");
$array = array('foo/bar', 'baz/boo');

foreach ($array as $xpath) { 
    $xpathResult = $xml->xpath($xpath);
    echo $xpathResult[0]."\n";
}

不需要像其他答案所建议的那样进行
eval
。只需执行以下操作:

<?
$x = 'hello';
$y = new StdClass;
$z = 'y';
$y->hello = 'wes';
print $y->$x;
print $z->$x;
?>


已解决-我自己的愚蠢错误;我在另一个地方重置了$xml变量,从而否定了我对SimpleXML对象的使用,加上我的eval()语法有点不正确。愚蠢的错误,与我的问题完全无关。对此很抱歉。

结果是它会发出“你好”的回音。此外,您肯定希望在评估用户提交的/外部内容时小心,因为这是一个巨大的安全漏洞。顺便说一下,这是一个很好的问题。尽管我想知道为什么有人会以这种方式存储变量引用。似乎应该有更好的方法来完成您试图完成的任何事情。我这样做是因为它允许我循环遍历XML元素列表,并显示完整的变量名,以及当前是否为该变量分配了任何用于调试的内容。比挖掘XML元素更容易看到,允许我按字母顺序对它们进行排序,等等。您知道吗,您可以像循环数组一样遍历simplexml元素?或者更好的方法是,使用XPath查询,这样您就可以只遍历与XPath匹配的元素。一个查询如何遍历文档中的所有simplexml元素?
<?
$x = 'hello';
$y = new StdClass;
$z = 'y';
$y->hello = 'wes';
print $y->$x;
print $z->$x;
?>