我有一个名为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
当我直接访问该属性时,它的工作原理!
我知道如何获得它的数值项吗?
答案 0 :(得分:1)
您的$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
确实不是一个好习惯!!! 并使您的代码易受攻击。
答案 1 :(得分:-1)
要解决这个问题,你需要一个名为&#34;变量变量的PHP机制&#34; (有关详细信息,请参阅http://php.net/manual/en/language.variables.variable.php)。
在您的情况下,您可以通过以下方式访问您的变量:
$value = $model->${$foo};