Php 从字符串获取对象值

Php 从字符串获取对象值,php,string,variables,metaprogramming,Php,String,Variables,Metaprogramming,我有一个问题要和大家分享。问题是,我想提取一个名称存储在字符串变量中的复杂对象的值 如您所知,您可以执行以下操作: $foo = 'Hello World'; $var = 'foo'; echo var_dump($$var); // Output: string(11) "Hello World" <?php $data = new stdClass(); $data->param["foo"]["bar"] = 'Hello World'; $var = 'data

我有一个问题要和大家分享。问题是,我想提取一个名称存储在字符串变量中的复杂对象的值

如您所知,您可以执行以下操作:

$foo = 'Hello World';

$var = 'foo';

echo var_dump($$var); // Output: string(11) "Hello World"
<?php

$data = new stdClass();

$data->param["foo"]["bar"] = 'Hello World';

$var = 'data->param["foo"]["bar"]';

$value = eval('return $'.$var.';');

var_dump($value);
当您尝试执行以下操作时会出现问题:

$data = new stdClass();

$data->param["foo"]["bar"] = 'Hello World';

$var = 'data->param["foo"]["bar"]';

echo var_dump($$var); // Output: NULL    
我可以想象为什么解析器不能这样做。我能想到的唯一解决方法是将$var分割成更小的块('->','[',']',…),并逐步对其进行评估

有人知道更优雅的解决方案吗

非常感谢

嗯,
数据->参数[“foo”][“bar”]
不是变量名,这就是为什么不能在
$$var
中使用它的原因

在这种情况下,最好使用
eval()
,如下所示

$var = 'return $data->param["foo"]["bar"];';
var_dump(eval($var));

是的,您不需要
echo var\u dump
,只需
var\u dump

最后,我可以通过执行以下操作来解决此问题:

$foo = 'Hello World';

$var = 'foo';

echo var_dump($$var); // Output: string(11) "Hello World"
<?php

$data = new stdClass();

$data->param["foo"]["bar"] = 'Hello World';

$var = 'data->param["foo"]["bar"]';

$value = eval('return $'.$var.';');

var_dump($value);

我认为不可能使用->或[以那种方式…”变量之类的元素只要有一个变量名。它们不是变量表达式。很抱歉,没有更好的解决方法。但是你能详细说明一下你的用例吗?你的答案似乎与德语拉姆的答案基本相同。如果你不介意,请点击帖子旁边的勾号来接受这个答案。另外,你也不需要
eval
字符串中的
return
。我通常不建议使用eval@Delan Azabani有一点是正确的,Hannes,
eval
有很多小问题,这些小问题可能会变成大问题,而且效率很低,应该在有更好的选择的地方避免。我只知道基本的PHP,所以我不太了解PHP有一个答案可以贡献。@Delan Azabani,如果没有返回,它似乎不起作用(
var\u dump()
shows
NULL
),这就是我添加它的原因。