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

时间:2010-05-11 23:01:17

标签: php oop drupal

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

如果我有这样的课程:

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,但我认为这并不重要。)

4 个答案:

答案 0 :(得分:4)

我相信你可以用大括号{}包裹它:

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

编辑:

好。现在我的大脑开启了。抱歉令人困惑的编辑。

答案 1 :(得分:1)

也试试这个:


$props = get_object_vars($this);

答案 2 :(得分:0)

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

它被称为variable, variables

答案 3 :(得分:-1)

我不明白你的问题。这有效:

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"
}