[英]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.{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']
的成员,因此您无法真正通过这种方式访问它。 您在这里有几种选择:
$foo = "menu";
$bar = "home";
//Get value of $foo[$bar]
$value = $model->{$foo}[$bar];
如果您没有两个不同变量的值,也可以使用php代码进行拆分。
$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.