1

私は次のように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;
    }
}

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

2つ目はserialize.phpです

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

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

3つ目はunserialize.phpです

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

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

次の出力が生成されます:「IntelCore i7@2.6GHz」

なぜ、cpuのプロパティがserialize.phpファイルで変更された場合、それが逆シリアル化に反映されないのですか?シリアル化されたファイル「store」の生データの内容を確認しましたが、cpuプロパティはシリアル化されたファイルに反映されていますが、unserialize.phpでシリアル化されていない場合、プロパティの変更は反映されません。何故ですか?誰か説明できますか?

4

1 に答える 1

6

問題は、新しいオブジェクトを作成し、この新しく作成されたオブジェクトのプロパティを$myMini出力することです。cpuシリアライゼーション/アンシリアライゼーションは、この方法では意味がありません。

unserialize.phpを次のように変更します。

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

echo $myMini->cpu;
于 2013-02-13T16:56:30.477 に答える