代码之家  ›  专栏  ›  技术社区  ›  Matt

如何从变量名动态设置对象的属性?

  •  2
  • Matt  · 技术社区  · 14 年前

    我试图用数据库中的变量填充模板。数据如下:

    id  field      content
    1   title      New Website
    1   heading    Welcome!
    1   intro      This is a new website I have made, feel free to have a look around
    2   title      About
    2   heading    Read all about it!
    

    我需要对该数据做的是设置 $template 对象根据 field 列并将所述值设置为 content 列;例如,对于id=1

    $template->title = 'New Website';
    $template->heading = 'Welcome!';
    $template->intro = 'This is a new websi...';
    

    我把数据放在一个数组中,我可以很容易地循环它,但是我不知道如何让属性成为另一个变量的名称。我尝试过变量方法,但没有用。这是否适用于对象属性?

    以下是我目前为止的情况:

    foreach($data as $field)
    {
        $field_name = $field['field'];
        $template->$$field_name = $field['content'];
    }
    

    我也试过用 $template->${$field_name} $template->$$field_name 但到目前为止还没有运气!

    3 回复  |  直到 14 年前
        1
  •  8
  •   Ignacio Vazquez-Abrams    14 年前
    $template->{$field_name}
    
        2
  •  3
  •   timdev    14 年前

    尝试:

    $template->$field_name;
    

    为什么会这样?

    $foo = 'bar';
    $object->bar = 1;
    
    if ($object->$foo == $object->bar){
       echo "Wow!";
    }
    
        3
  •  0
  •   oezi    14 年前

    使用

    $template->{$field_name} = $field['content'];
    

    或者简单地

    $template->$field_name = $field['content'];