2013-07-17 3 views
0

클래스 인 인스턴스 변수의 값을 가져올 수 있으며 얻을 필요가있는 값은 문자열입니까? 나는 "$ 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를 얻을 수 있습니다 알고 있지만 내가 테스트하고 짧은 값을 취득 할 변수 전달에이 경우에 나는 노력하고있어.

+0

수업은 어떻게 생겼습니까? 나는 당신이하려고하는 것이 이것보다 간단해야한다고 생각합니다. – Maximus2012

+0

코드가 너무 많아서 위의 코드 스 니펫에서 어떤 일이 발생했는지 요약했습니다. –

+0

그래서 $ user는 사용자 클래스의 객체라고 가정합니다. $ user = new User()와 같은 것. Prop이 사용자 클래스에서 public으로 선언 된 경우 var_dump ($ user-> Prop) – Maximus2012

답변

3

eval 당신이 $val에서 속성 값을 저장하려면 평가의 결과를 반환하지 않습니다, 당신은 평가 문자열에 포함해야한다 : 당신은을 대표 할 수 없기 때문에

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

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

가장 좋은 해결책은 문자열에 return을 넣어 값을 평가하는 메서드를 넣었습니다.이 메서드는 올바른 트랙에 있습니다. 감사합니다! –

2

이 작동하지 않습니다 동적으로 ->. 내가 문자열 (11) "$ 사용자 -> 발의안"이있는 경우

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

@tlenss 아. 좋은 캐치. 내 Wamp를 시작하고 두 번 확인했습니다. 내 대답을 수정하여 찾기를 정정하십시오. – Rooster

0

이 밝혀 내가해야 할 무엇이다 $가에 저장됩니다

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

하지만 당신은이 작업을 수행 할 수 있습니다 : 좋은 더 밀접하게 문서를 읽을 수

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

필요가 ... 그것에 대해 쓰는 그래도 난 것 같아요.