【问题标题】:How to access dynamic property by using variable?如何使用变量访问动态属性?
【发布时间】:2011-11-15 14:06:18
【问题描述】:

见:

$class_members = get_class_vars(__CLASS__);

foreach($class_members as $key => $value)
{
    if (strpos($key, '_output') === 0)
    {
        // I want to eval() this
        $code = '$this->' . $key . ' = 0;';
    }
}

假设我想将值 0 分配给以 _output 开头的所有类成员。我打算使用eval好主意还是坏主意?

【问题讨论】:

  • Reflection一起做。
  • eval() 从来都不是一个好主意。而且...您是否尝试从类方法中执行此操作?还是来自物体之外的某个地方?如果你在里面,你为什么需要评估? $this 反正已经存在了。
  • 为什么不只是$this->$key = 0;
  • 你能告诉我如何通过反射来实现我想要做的事情吗?
  • 看起来可以这样做:php.net/manual/en/reflectionclass.getdefaultproperties.php 但我不知道如何在课堂上做到这一点。另外,这只会让我成为会员。我还会像在 sn-p 中那样循环遍历它们吗?还是有一种“反思”的方式来做到这一点?

标签: php properties eval


【解决方案1】:

您不需要eval()。您可以使用 $this->{$key} 中的变量:

foreach($class_members as $key => $value)
{
    if (strpos($key, '_output') === 0)
    {
        // Look mom, no eval()!
       $this->{$key} = 0;
    }
}

【讨论】:

  • $this->$key 不带花括号也可以。虽然大括号确实提高了可读性。
【解决方案2】:

你可以这样做:

$this->{$key} = 0;

只有少数情况下eval 不被视为evil

这不是其中之一:)

【讨论】:

  • 唯一能想到的情况是//eval("");:D
猜你喜欢
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多