PHP对象序列化和反序列化无法正常工作

时间:2013-02-13 16:54:21

标签: php serialization

我有3个源文件如下:

第一个是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);

////////////////////////////////////////////// < / p>

第三个是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中反序列化时,不会反映属性更改。这是为什么?谁能解释一下?

1 个答案:

答案 0 :(得分:6)

问题是您创建了一个新的$myMini对象并输出了这个新创建的对象的cpu特性。序列化/反序列化没有这种意义。

unserialize.php 更改为:

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

echo $myMini->cpu;