Получение значения объекта из строки - PullRequest
0 голосов
/ 23 декабря 2010

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

Как вы, возможно, знаете, вы можете сделать следующее:

$foo = 'Hello World';

$var = 'foo';

echo var_dump($$var); // Output: string(11) "Hello World"

Проблема возникает, когда вы пытаетесь сделать:

$data = new stdClass();

$data->param["foo"]["bar"] = 'Hello World';

$var = 'data->param["foo"]["bar"]';

echo var_dump($$var); // Output: NULL    

Я могу себе представить, почему парсер не может этого сделать.Единственный обходной путь, который я могу придумать, - это разделить $ var на более мелкие куски ('->', '[', ']', ...) и оценить его шаг за шагом.

Кто-нибудь знаетболее элегантное решение?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Ну, data->param["foo"]["bar"] не является именем переменной, поэтому вы не можете использовать его в $$var.

Вам лучше использовать eval() в этом случае, что-то вроде этого

$var = 'return $data->param["foo"]["bar"];';
var_dump(eval($var));

И да, вам не нужно echo var_dump, просто var_dump

0 голосов
/ 23 декабря 2010

Наконец-то я мог решить эту проблему, выполнив следующее:

<?php

$data = new stdClass();

$data->param["foo"]["bar"] = 'Hello World';

$var = 'data->param["foo"]["bar"]';

$value = eval('return $'.$var.';');

var_dump($value);
...