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()
showsNULL
),这就是我添加它的原因。