从字符串中获取对象值

时间:2010-12-23 11:54:01

标签: php string variables metaprogramming

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

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

$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拆分为更小的块(' - >','[',']',...)并逐步评估它。

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

非常感谢

2 个答案:

答案 0 :(得分:1)

好吧,data->param["foo"]["bar"]不是变量名,这就是为什么你不能在$$var中使用它。

在这种情况下,最好使用eval(),类似这样的

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

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

答案 1 :(得分:0)

最后,我可以通过以下方式解决问题:

<?php

$data = new stdClass();

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

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

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

var_dump($value);