我有问题要与大家分享。问题是,我想提取一个复杂对象的值,其名称存储在一个字符串变量中。
如您所知,您可以执行以下操作:
$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 :(得分: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);