2013-10-30 84 views
1

我希望能夠從一個字符串訪問屬性的值...從字符串訪問一個對象的屬性

$obj->Test->FGH = "Well Done!"; 

我已經試過

var_dump($obj->{'Test->FGH'}); 

而且

var_dump(eval('$obj->Test->FGH')); 

我知道,下面的工作,但它必須從字符串定義

var_dump ($obj->Test->FGH); 

我也知道下面的工作,但它沒有訪問FGH屬性;

var_dump ($obj->{'Test'}); 

那麼如何從字符串中返回$ obj-> Test-> FGH的值?

+0

是字符串總是一個對象變量的第一部分(即以'$'開頭),其餘是一系列的財產名稱? – geomagas

回答

0

你需要迭代遍歷對象結構,直到找到屬性。

這是一個遞歸函數來完成這項工作。

只有當搜索到的值不是對象時才起作用。如果您正在查找的屬性是對象,則必須修改它,依賴$props陣列是否爲空。

$props參數需要以與對象屬性嵌套相同的方式進行排序。

你也可以修改它有一個字符串作爲第二個參數,例如Test/FGH

function search_property($obj, $props) { 

    $prop = array_shift($props); 

    // If this is an object, go one level down 
    if (is_object($obj->$prop)) { 
     return search_prop($obj->$prop, $props); 
    } 

    if (!isset($obj->$prop)) { 
     return false; 
    } 

    return $obj->$prop; 

} 

$val = search_property($obj, array('Test', 'FGH')); 
+0

不幸的是,它不得不成爲一個單一的字符串! – craig1231

+0

郝我不明白,我改變了我的答案 – mexique1

相關問題