2010-12-23 8 views
0

나는 모두에게 공유하는 데 문제가 있습니다. 문제는 문자열 변수에 저장된 이름을 가진 복잡한 객체의 값을 추출하고 싶습니다. 아시다시피문자열에서 객체 값 얻기

는 다음을 수행 할 수 있습니다 : 당신이해야 할 때

$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를 작은 덩어리 ('->', '[', ']', ...)로 나누고 단계별로 평가하는 것입니다.

누구보다 세련된 솔루션을 알고 있습니까?

덕분에 많은

+0

나는 그런 식으로 요소를 사용할 수 있다고 생각하지 않습니다. "그런 식으로 ... – Hannes

+0

"가변 변수 es "는 가변 변수 이름을 가지고 있습니다. 변수 표현식이 아닙니다. 죄송합니다. 더 좋은 해결 방법은 없습니다. 하지만 어쨌든 유스 케이스에 대해 자세히 설명해 주시겠습니까? – mario

답변

1

음, data->param["foo"]["bar"]$$var에서 사용할 수 없습니다 그 이유는, 변수 이름이 아닙니다. 이

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

과 같은

당신이 경우 eval()를 사용하는 것이 더 낫다, 뭔가 그래, 당신은 단지 마지막 var_dump

0

내가 수행하여 다음 그것을 해결할 수, echo var_dump 할 필요가 없습니다 :

<?php 

$data = new stdClass(); 

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

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

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

var_dump($value); 
+2

귀하의 답변은 일반적으로 * German Rumm *의 답변과 같아 보입니다. 괜찮 으면 게시물 옆에있는 체크 표시를 클릭하여 답변을 수락하십시오. 또한,'eval' 문자열에'return'이 실제로 필요 없습니다. –

+0

물론 나는 eval을 사용하여 조언을하지 않습니다. @Delan Azabani는 포인트가 있습니다. – Hannes

+0

사실입니다. Hannes,'eval'은 비효율적 일뿐만 아니라 큰 문제가 될 수있는 작은 문제를 많이 가지고 있으므로 더 나은 대안이있는 곳에서는 피해야합니다 . 저는 기본적인 PHP 만 알고 있으므로 정말 기여할 답변이 없습니다. –