Получение значения динамического класса и динамического свойства

Можно ли получить значение переменной экземпляра, которая является классом, а значение, которое нужно получить, - это просто строка? Я получаю строки, которые, скажем, $user->Prop, и я хочу eval() эту строку, чтобы получить значение, но кажется, что функция eval не знает о $ user, даже если это экземпляр переменная.

$user->Prop = 3;
$a = "user->Prop";
$val = eval($$a); //how to get 3 with this string?

Я знаю, что могу сделать

$prop = "prop";
$user->$prop;

и получить 3, но в этом случае я пытаюсь передать только переменную, которую я хочу проверить, и получить значение вкратце.

3 ответа

Решение

eval не возвращает результат оценки, если вы хотите сохранить значение свойства в $val, вы должны включить его в оценочную строку:

$a = 'user->prop';
$eval = '$val = $'.$a.';';

eval($eval);
var_dump($val);

Это не сработает, потому что вы не можете представлять -> динамически.

$user->Prop = 3;
$a = "user->Prop";
$val = ${$a};

Но вы можете сделать это:

$user->Prop = 3;
$a = "user";
$b = "Prop";
$val = ${$a}->$b;

Оказывается, если у меня есть строка (11)"$user->Prop", и она хранится в $a, мне нужно сделать следующее:

$val = eval("return $a;");

нужно читать документы более внимательно... хорошо, чтобы написать об этом, я думаю, хотя.

Другие вопросы по тегам