2013-02-13 156 views
1

我有3個源文件如下:PHP對象序列化和反序列化不正常

第一個是source_class.php

class MacMini 
{ 
    public $memory = "16 Gigabytes"; 
    public $cpu = "Intel Core i7 @ 2.6GHz"; 
    public $HD = "1TB @ 5200 rpms"; 
    public function mem() 
    { 
     return $this->memory; 
    } 
    public function centralPU() 
    { 
     return $this->cpu; 
    } 
    public function hard_drive() 
    { 
     return $this->HD; 
    } 
} 

////////////// /////////////////

第二個是serialize.php

include "source_class.php"; 
$myMini = new MacMini; 
$myMini->cpu = "Intel Core i7 @ 3.4GHz"; 
$serialized = serialize($myMini); 
file_put_contents("store", $serialized); 

///////////////////////////// /////////////////

第三個是unserialize.php

include "source_class.php"; 
$data = file_get_contents("store"); 
$unserialized = unserialize($data); 

$myMini = new MacMini; 
echo $myMini->cpu; 

它產生以下輸出: 「英特爾酷睿i7 @ 2.6GHz的」

爲什麼如果在serialize.php文件中更改了cpu的屬性,是不是反映在反序列化中?我檢查了序列化文件的原始數據內容「store」,並且cpu屬性反映在序列化文件中,但是當它在unserialize.php中反序列化時,屬性更改未反映。這是爲什麼?誰能解釋一下?

回答

6

問題是您創建一個新的$myMini對象並輸出這個新創建的對象的合適性cpu。序列化/非序列化沒有這種意義。

變化unserialize.php到:

include "source_class.php"; 
$data = file_get_contents("store"); 
$myMini = unserialize($data); 

echo $myMini->cpu; 
+0

哦,現在我明白了。我應該抓住爲什麼的邏輯。謝謝! – 2013-02-13 17:01:22

+0

不客氣。這是一種錯誤,因爲在線購買時應該將交付的硬件與訂購的硬件進行比較。 :) 呵呵 – hek2mgl 2013-02-13 17:03:28