在php中通过带数组的字符串访问属性?

在php中通过带数组的字符串访问属性?,php,oop,drupal,Php,Oop,Drupal,我有一个很大的属性列表,我需要在两个对象之间映射,其中一个,我需要映射的值被隐藏在数组中。我希望避免在代码中硬编码属性名称 如果我有这样一门课: class Product { public $colors, $sizes; } $props = array('colors', 'sizes'); foreach ($props as $p) { $this->$p = $other_object->$p; } 我可以访问如下属性: class Product {

我有一个很大的属性列表,我需要在两个对象之间映射,其中一个,我需要映射的值被隐藏在数组中。我希望避免在代码中硬编码属性名称

如果我有这样一门课:

class Product {
    public $colors, $sizes;
}
$props = array('colors', 'sizes');
foreach ($props as $p) {
    $this->$p = $other_object->$p;
}
我可以访问如下属性:

class Product {
    public $colors, $sizes;
}
$props = array('colors', 'sizes');
foreach ($props as $p) {
    $this->$p = $other_object->$p;
}
据我所知,如果左侧的每个属性都是一个数组,我不能这样做:

foreach ($props as $p) {
    $this->$p[0]['value'] = $other_object->$p;
}
这是对的,还是我错过了一些巧妙的方法


(这是在drupal中,但我认为这并不重要。)

我不理解您的问题。这项工作:

class Test {
    public $prop = "prov value";
}
$arr = array(array("prop"));
$test = new Test();
$test->$arr[0][0] = "new prop value";
var_dump($test);
结果:

object(Test)#1 (1) { ["prop"]=> string(14) "new prop value" } 对象(测试)#1(1){ [“道具”]=> 字符串(14)“新属性值”
} 我不明白你的问题。这项工作:

class Test {
    public $prop = "prov value";
}
$arr = array(array("prop"));
$test = new Test();
$test->$arr[0][0] = "new prop value";
var_dump($test);
结果:

object(Test)#1 (1) { ["prop"]=> string(14) "new prop value" } 对象(测试)#1(1){ [“道具”]=> 字符串(14)“新属性值”
} 我相信你可以用大括号把它括起来。
{}

foreach ($props as $p) {
    $this->{$p}[0]['value'] = $other_object->$p;
}
编辑:


好的。现在我的大脑启动了。很抱歉让人困惑。

我相信你可以用大括号将它括起来
{}

foreach ($props as $p) {
    $this->{$p}[0]['value'] = $other_object->$p;
}
编辑:

好的。现在我的大脑启动了。很抱歉,编辑混乱。

请尝试以下操作:


$props = get_object_vars($this);
还可以尝试以下方法:


$props = get_object_vars($this);
它叫


它被称为。

这是动态设置对象属性的正确技术这是动态设置对象属性的正确技术
$p
在第一轮中应该是
'colors'
$$p
将尝试访问
$colors
以用作属性名称,这在这里是不需要的,因为
$colors
不是定义的变量。在
$$p
中删除多余的
$
,您就没事了。谢谢@awgy。那么这一次应该归功于你了。
$p
第一轮应该是
'colors'
$$p
将尝试访问
$colors
以用作属性名称,这在这里是不需要的,因为
$colors
不是定义的变量。在
$$p
中删除多余的
$
,您就没事了。谢谢@awgy。这一点应该归功于你。你的例子并不能满足我的需要。您正在将$test->prop设置为一个值;在我的例子中,$test->prop本身就是一个数组,我需要设置其中的一部分。上面的花括号有效。你的例子不能满足我的需要。您正在将$test->prop设置为一个值;在我的例子中,$test->prop本身就是一个数组,我需要设置其中的一部分。卷曲的背带在工作之上。