2013-05-17 47 views
0

我有一個項目,最後一位開發人員在將對象存儲到數據庫之前忘記了序列化對象。現在我有:php var_export對象 - 在存儲之前忘記序列化

stdClass::__set_state(array(
    'id' => '1', 
    'name' => 'John', 
    'first_name' => 'John', 
    'middle_name' => 'Montel', 
)) 

我想要做的是,在專業的方式,並從這個變量返回的對象。 我想訪問經典對象訪問方式$ obj-> name; 我知道以前序列​​化對象時很容易。但現在我擁有了我所擁有的。

谷歌研究了2個小時 - 目前沒有任何想法。謝謝你的幫助 !

https://bugs.php.net/bug.php?id=29361

回答

0

即實際使用var_export,它返回有效的PHP代碼而得到的序列化形式。從手冊:

var_export - 輸出或返回的 可變

可解析字符串表示如果在序列化的字符串類的名稱將是「X」,像「X :: __ set_state ...',你可以這樣來定義的‘X __set_state’的方法',代碼爲:

$serializedObj = "X::__set_state(array('id' => '1','name' => 'John',...))"; 
eval('$myObj = '.$serializedObj).';' 

之後,你可以這樣做:

$name = $myObj->name; 

由於類是「stdClass的」,你必須在我看來2種選擇:

  1. 更換stdClass::__set_state(最後)在變量 與空字符串和eval剩下的數組。
  2. stdClass替換爲您自己的類X,並在X中定義__set_state方法。
+0

我這樣做有: $陣列=的eval( '迴歸' .str_replace(陣列( 'stdClass的:: __ set_state(' '))'),陣列( '', ')'),$ VAR)。 ';'); echo $ array ['id']; 但仍在尋找更客觀的解決方法 – user2394485

相關問題