旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

unserializeのバグ?

2007年11月25日

PHP5のserialize~unserializeでオブジェクトをシリアル化するときに不振な挙動が、という話。
Fooインスタンスをシリアル化した時の文字列を覚えておく

<?php
class Foo {}
$foo = new Foo;
echo serialize($foo) . "\n"; // -> 'O:3:"Foo":0:{}'
で、これからが本番

// さっきのクラスをメンバ変数付きにする
class Foo {
public $a = 1;
}
$foo = new Foo;
// さっきのクラスのシリアルをunserialize化する
var_dump(unserialize('O:3:"Foo":0:{}'));

で、var_dumpの出力

object(Foo)#2 (1) {
["a"]=>
int(1)
}

unserializeしたのは中身が空のFooクラスのはずなのに、メンバ変数を設定したクラスの内容が反映されている。

うーん、わからん。
__sleepと__wakeupを調べ中に発見したんだけど
どうせ使わないものをすぐ終わるだろ調査してハマって時間を浪費する・・・ってのに憤りを隠せない、無念。