在PHP中动态获取数组类属性中的item值

时间:2016-11-24 10:49:16

标签: php

我有一个名为Model的对象:

class Model {
    public $menu;
}

在一个函数中,我实例化一个像这样的新模型:

public function Hello(){
    $model = new Model();
    $model->menu['home'] = 'Hi there';
}

<小时/> 在我的计划中,我有一个可以包含多个属性的Model类。我希望这些属性能够在我的视图中获取它们(html文件)。有<!-- $model.{PropertyName} -->个元素被Model类中可用的属性值替换。在这个特定情况下,我有一个属性$menu,如上面显示的array

现在,我有一段代码提取字符串值,其中此字符串的结果为menu['home']。使用此字符串,我尝试读取模型的属性menu

所以:

private function Action($model){
    $foo = "menu['home']";

    //Get value of $foo
    $value = $model->$foo;

}

我希望得到'嗨那里',但我得到一个通知: Notice: Undefined property: Model::$menu['home'] in ....script.php on line X

当我直接访问该属性时,它的工作原理!

我知道如何获得它的数值项吗?

2 个答案:

答案 0 :(得分:1)

您的$model实例没有名称为menu['home']的成员,因此您无法以这种方式真正访问它。你有几个选择:

选项1 - 拆分字符串并使用两个变量:

$foo = "menu";
$bar = "home";

//Get value of $foo[$bar]
$value = $model->{$foo}[$bar];

如果不使用两个不同变量中的值,也可以使用php代码将其拆分。

选项2 - 使用eval(我真的建议反对!)

$foo = "menu['home']";

//Get value of $foo

die('ARE YOU SURE YOU REALLY WANT THIS?!?!?!');

$value = eval('return $model->'.$foo.';');
var_dump($value);
  

请注意,在不需要时使用eval确实不是一个好习惯!!! 并使您的代码易受攻击

答案 1 :(得分:-1)

要解决这个问题,你需要一个名为&#34;变量变量的PHP机制&#34; (有关详细信息,请参阅http://php.net/manual/en/language.variables.variable.php)。

在您的情况下,您可以通过以下方式访问您的变量: $value = $model->${$foo};