将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;
?>