2010-12-23 118 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 2010-12-23 12:03:01

+0

「變量變量es「只是有一個可變的變量名稱。它們不是可變表達式。抱歉,沒有更好的解決方法。但是,你能詳細說明一下你的用例嗎? – mario 2010-12-23 12:04:10

回答

1

嘛,data->param["foo"]["bar"]不是一個變量的名字,這就是爲什麼你不能在$$var使用它。

你最好是在這種情況下使用eval(),像這樣

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

,是的,你不需要echo var_dump,只是var_dump

0

最後,我可以做解決它下面:

<?php 

$data = new stdClass(); 

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

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

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

var_dump($value);