2017-01-17 51 views
0

我有以下具有以下屬性PHP對象:
對象:
- 高級
- 數據
要訪問它在PHP中我會做如下:PHP轉換成字符串對象子子變量

$object->Advanced->Data 

現在我想要定義具有這樣的語法的字符串:

$string = "Advanced->Data"; 

我如何從這裏出發,能夠使用:

$object->$string = "Something"; 

因此,在年底

$object->Advanced->Data = "Something"; 

我無法找出使用eval或$對象 - > {$ string}裏 如果我嘗試使用$object->$string PHP創建一個名爲「高級 - >數據」的新屬性,基本上不會解釋 - >運算符。

回答

-1

一旦試試這個,

$string = "Advanced->Data"; 
$arr = explode("->",$string); 
$temp = $object->{$arr[0]}->$arr[1]; 

但這是特定條件。讓我知道你的要求,如果這不是答案。

+0

至少,下來選民:讓我知道你的抱怨是什麼?這樣我才能糾正。 – rahulsm

+0

這工作,因爲我的情況很特別,謝謝! –

+0

非常歡迎您! – rahulsm

0

雖然這是一個黑客,試試這個,應該對你的情況

$arr = array(); 
$arr['Advanced']['Data'] = 'something'; 
$string = json_decode(json_encode($arr), 0); 
echo $string->Advanced->Data; 
0

工作,雖然這是一個黑客,這也可以獲取你的願望

$string = &$object->Advanced->Data; 
$string = "here we go"; 
var_dump($object->Advanced->Data); 
0

可能的eval()是不是最好的解決方案,但它可以在你的情況下有用:

class obj2 { 
    public $Data = 'test string'; 
} 

class obj1 { 
    public $Advanced; 

    public function __construct() { 
     $this->Advanced = new obj2(); 
    } 
} 

$test = new obj1(); 
$string1 = "\$test->Advanced->Data = 'new string';"; 
$string2 = "\$result = \$test->Advanced->Data;"; 
eval($string1); 
eval($string2); 
echo $result . PHP_EOL; 

輸出將是「新字符串」。