2013-07-17 5 views
0

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

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

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

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

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

+0

Как выглядит ваш класс? Я думаю, что то, что вы пытаетесь сделать, должно быть проще этого. – Maximus2012

+0

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

+0

, поэтому я предполагаю, что $ user является объектом класса пользователя. Что-то вроде $ user = new User(). если Prop объявлен как открытый в пользовательском классе, тогда вы сможете получить значение, выполнив что-то вроде: var_dump ($ user-> Prop) – Maximus2012

ответ

3

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

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

eval($eval); 
var_dump($val); 
+0

Лучшее решение, я поставил метод, чтобы оценить значение, вернув в строку, это привело меня к правильному пути, спасибо! –

2

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

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

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

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

@tlenss ahhh. Хорошо поймал. Начал мой Wamp и дважды проверял. Отредактировал мой ответ, чтобы исправить вашу находку. – Rooster

0

Оказывается, если у меня есть строка (11) «$ user-> Prop», и она хранится в $ а то, что мне нужно сделать, это :

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

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