【问题标题】:Getting a value of a dynamic class and dynamic property获取动态类和动态属性的值
【发布时间】:2013-07-17 20:17:59
【问题描述】:

是否可以获取作为类的实例变量的值,而需要获取的值只是一个字符串?我得到的字符串是 "$user->Prop" 可以说,我想 eval() 这个字符串来获取值,但似乎 eval 函数不知道 $user 即使它是一个实例变量。

$user->Prop = 3;
$a = "user->Prop";
$val = eval($$a); //how to get 3 with this string?

我知道我能做到

$prop = "prop";
$user->$prop;

并得到 3,但在这种情况下,我试图只传递我想要测试的变量并得到简短的值。

【问题讨论】:

  • 你的班级是什么样的?我认为您要做的事情应该比这更简单。
  • 显示的代码太多了,我确实总结了上面代码片段中发生的事情。
  • 所以我假设 $user 是用户类的对象。像 $user = new User() 这样的东西。如果 Prop 在用户类中声明为公共,那么您应该能够通过执行以下操作来获取值: var_dump($user->Prop)
  • 是的,但我只有一个值 string(11)"$user->Prop" 并且想在这种情况下评估为 3。
  • 啊,原来 eval 函数会返回一个值,但我必须使用 return 所以在这种情况下,如果我收到 "$user->Prop" 我必须做 $a = " /$用户->道具"; $val = eval("return $a;");

标签: php eval dynamic-class dynamic-properties


【解决方案1】:

eval 不返回评估结果,如果您想将属性值存储在$val 中,则必须将其包含在评估字符串中:

$a = 'user->prop';
$eval = '$val = $'.$a.';';

eval($eval);
var_dump($val);

【讨论】:

  • 最佳解决方案,我已经通过将 return 放入字符串中来评估值的方法,这让我走上了正轨,谢谢!
【解决方案2】:

这不起作用,因为您不能动态表示 ->

$user->Prop = 3;
$a = "user->Prop";
$val = ${$a};

但你可以这样做:

$user->Prop = 3;
$a = "user";
$b = "Prop";
$val = ${$a}->$b;

【讨论】:

  • @tlens 啊哈。不错的收获。启动我的 Wamp 并仔细检查。编辑了我的答案以纠正您的发现。
【解决方案3】:

如果我有一个 string(11)"$user->Prop" 并且它存储在 $a 我需要做的是:

$val = eval("return $a;");

需要更仔细地阅读文档...不过我想写下来还是不错的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2013-01-04
    • 2017-05-27
    • 2011-09-01
    • 1970-01-01
    • 2020-07-06
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多