Php Magic方法从数组中动态获取和设置值

Php Magic方法从数组中动态获取和设置值,php,Php,如果以前有人问过这样的问题,我很抱歉,但是根据我的问题,我找不到任何东西 我有一个类,它使用像get和set这样的神奇方法。 我想要的是使用数组的属性作为set“name”,以便以后使用get“name”访问该属性 我现在做的是: $arr = array('name' => 'value') $this->obj->name = $arr['name']; 当我尝试时,我想要的和不起作用的: $arr = array('name' => 'value'); fore

如果以前有人问过这样的问题,我很抱歉,但是根据我的问题,我找不到任何东西

我有一个类,它使用像get和set这样的神奇方法。 我想要的是使用数组的属性作为set“name”,以便以后使用get“name”访问该属性

我现在做的是:

$arr = array('name' => 'value')
$this->obj->name = $arr['name'];
当我尝试时,我想要的和不起作用的:

$arr = array('name' => 'value');

foreach($arr as $item)
   $this->obj->[$item] = $item['name'];

echo $this->obj->name; // result should be 'value'

PHP实际上很好地使用了神奇的方法,这似乎只是一个语法问题。你应该能做你想做的事

foreach ($arr as $key => $item) 
    $this->obj->$key = $item;

echo $this->obj->name; // Results in 'value'
正确的方法是:

$arr = array('name' => 'value');

foreach($arr as $attributeName =>$value) {
  $this->obj->{$attributeName} = $value;
}

echo $this->obj->name;

不,
$item
value
$arr
只是一个平面数组,所以它有效地,
$this->obj->value
几秒钟前就得到了:)谢谢!为什么大括号{$attribute}?这是动态声明对象属性的正确方法。我不认为这是真的,大括号只允许您在尝试访问表达式之前对其求值。因此->$item['name']和->{$item['name']}在功能上是不同的,但是->$item和->{$item}是相同的,因为没有歧义。