繁体   English   中英

在PHP中动态地从数组类属性获取项目的值

[英]Get value of item from array class property dynamically in 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

当我直接访问该属性时,它将起作用!

知道如何获取数组项的价值吗?

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

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

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

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

如果您没有两个不同变量的值,也可以使用php代码进行拆分。

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

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

//Get value of $foo

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

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

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

要解决此问题,您需要一个称为“变量变量”的PHP机制(请参阅http://php.net/manual/en/language.variables.variable.php )以获取更多信息。

就您而言,可以通过以下方式访问变量: $value = $model->${$foo};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM