2008-11-28 59 views
0

我正在開發Web應用程序的前端代碼,並遇到了一個奇怪的自定義對象。當我要求的對象,並使用print_r()我得到這個(對象是大了很多,只是把它切到相關的代碼):對象轉換爲字符串的PHP數組(我可以告訴)

MemberInfo Object 
(
    [meta_data] => Array 
    (
     [email_recommendations] => true 
     [email_updates] => false 
    ) 
) 

要在的MemberInfo對象改變一些東西,我只是更新它的屬性和發送它用第二個函數返回到後端。因此,例如,頁面加載一次(這給了我們上面顯示的對象),然後我發送一個POST請求與第二次加載頁面上的變化。在第二次加載期間,我獲取上面的對象,根據POST以$memberInfo->meta_data['email_recommendations'] = 'false';之類的東西設置不同的字段,然後在運行更新函數(類似於updateMember($memberInfo);)之後使用該版本的對象來填充頁面。但是,一旦我已經改變了對象屬性值print_r()顯示我不同的東西:

MemberInfo Object 
(
    [meta_data] => {\"email_recommendations\":\"false\",\"email_updates\":\"false\"} 

) 

我敢肯定,我俯瞰一些非常愚蠢的;有沒有人有一個好主意,我應該找什麼?我查了一下,後端代碼沒有通過引用傳遞(函數調用爲updateMember(MemberInfo $memberInfo);),但我對PHP 5對象的處理有點不穩定,所以我不確定可能會出現什麼問題。

我不希望深入調試;我只需要知道我應該尋找什麼導致屬性的所有權利應該是一個數組的變化的大方向。

在此先感謝!

+0

很奇怪......貌似成員已通過json_encode把() – Greg 2008-11-28 22:15:37

+0

呀;我想這就是它如何存儲在數據庫中,但我不明白爲什麼我要修改的數組會改變它自己(特別是因爲函數調用沒有通過引用傳遞)。 – 2008-11-28 22:18:11

回答

1

那麼你打電話給​​後使用對象? PHP5對象默認通過引用傳遞,因此如果您在meta_data屬性上調用json_encode(),它將顯示您描述的行爲。

您可能想要發佈​​函數進行確認,但聽起來好像是這樣。

即:

class MemberInfo { 
    function __construct() { 
     $this->meta_data = array(
      'email_recommendations' => true, 
      'email_updates' => false, 
     ); 
    } 
} 

function updateMember($meminfo) { 
    $meminfo->meta_data = json_encode($meminfo->meta_data); 
    // do stuff 
} 

$meminfo = new MemberInfo(); 

updateMember($meminfo); 

print_r($meminfo); // you'll see the json encoded value for "meta_data"