получить доступ к свойству через строку с массивом в php? - PullRequest
0 голосов
/ 12 мая 2010

У меня есть большой список свойств, которые мне нужно отобразить между двумя объектами, и в одном из них значение, которое мне нужно отобразить, скрыто внутри массива. Я надеюсь избежать жесткого кодирования имен свойств в коде.

Если у меня есть такой класс:

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

Это правильно, или я упускаю какой-то умный способ обойти это?

(Это в друпе, но я не думаю, что это имеет значение.)

Ответы [ 4 ]

4 голосов
/ 12 мая 2010

Полагаю, вы можете завернуть его в фигурные скобки {}:

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

Edit:

Хорошо. Теперь мой мозг включен. Извините за смущающие правки.

1 голос
/ 12 мая 2010

Также попробуйте это:


$props = get_object_vars($this);
0 голосов
/ 12 мая 2010
foreach ($props as $p) {
    $this->{$p}[0]['value'] = $other_object->{$p};
}

Это называется переменная, переменные .

0 голосов
/ 12 мая 2010

Я не понимаю твою проблему. Это работает:

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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...