2010-12-23 117 views
0

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

正如你可能知道,你可以做到以下几点:

$foo = 'Hello World'; 

$var = 'foo'; 

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

当您尝试做的问题就来了:

$data = new stdClass(); 

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

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

echo var_dump($$var); // Output: NULL  

我能想象,为什么解析器无法做到这一点。我能想到的唯一解决方法是将$ var分成更小的块(' - >','[',']',...)并逐步评估它。

有谁知道更优雅的解决方案?

非常感谢

+0

我不认为它有可能使用像 - >或[以这种方式... – Hannes 2010-12-23 12:03:01

+0

“变量变量es“只是有一个可变的变量名称。它们不是可变表达式。抱歉,没有更好的解决方法。但是,你能详细说明一下你的用例吗? – mario 2010-12-23 12:04:10

回答

1

嘛,data->param["foo"]["bar"]不是一个变量的名字,这就是为什么你不能在$$var使用它。

你最好是在这种情况下使用eval(),像这样

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

,是的,你不需要echo var_dump,只是var_dump

0

最后,我可以做解决它下面:

<?php 

$data = new stdClass(); 

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

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

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

var_dump($value);