我有一个很大的属性列表,我需要在两个对象之间进行映射,在一个中,我需要映射的值隐藏在一个数组中。我希望避免在代码中对属性名称进行硬编码。
如果我有这样的课程:
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,但我认为这并不重要。)
答案 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" }