blogPHPでWEB+DBシステムの開発をやっています。Calendarが流行していますね。PHP関連だとCakePHP(明日書きます!)やSymfony、OpenPNEなどはあるのですが、PHP単体が無かったので作ってみました。Calendarについては、下記リンクが詳しいです。これを書いている段階では、まだ参加枠があるので、どんどん参加して下さい。Calendarというわけで、まず初回(12/2に始めたので、Day1は空席で)のネタは、最近自分の中で流行中のPHPのシリアライズデータ(serialize()/unserialize())について。シリアライズデータのデータ型CakePHPのセキュリティホール発覚以降、一部で脚光を浴びたPHPのシリアライズなのですが、シリアライズデータで表現できるデータ型をあらためて調べてみました。まあPHPのソース見れば一目瞭然ですね。yy9;ざっくり読んだ感じでは以下な内容でしょうか。booleanboolean(論理型)です。b:の後ろの数値は、1ならtrue、それ以外ならfalseになるようです。integerinteger(整数型)です。double/floatdouble/float(浮動小数点数)です。stringstring(文字列)です。’s’と’S’の違いはよく分かってないのですが、文字列をserialize()すると’s’になります。s(S):の後ろが文字列のバイト数で、””で文字列を囲みます。NULLNULLです。arrayarray(配列)です。a:の後ろは要素数です。あとは添え字、要素によって様々な形式を記載します。Object?クラスインスタンス(オブジェクト)です。通常インスタンスをserialize()すれば、’O’となります。O:3:"Foo":1:{s:4:"var1";s:3:"abc";}‘C’は、シリアライズする対象クラスがSerializableをimplementしている時に付与されます。この場合、シリアライズ、デシリアライズ処理は、PHPデフォルトの処理ではなく、対象クラスのserialize/unserializeメソッドで定義された処理が実行されます。serializeメソッドではシリアライズしたデータをreturnします。unserializeメソッドでは、シリアライズしたデータが引数で渡されるのでそれをパースしてインスタンス変数にセットします。ReferenceReference(参照)です。’r’(小文字)と’R’(大文字)でデシリアライズした時の挙動が変わります。‘R’の場合は、参照型としてデシリアライズされます。&int(100)}‘r’の場合は、変数に参照先の値がセットされますが、参照型にはなりません。int(100)}参照型変数をシリアライズした際は、参照先の変数も一緒にシリアライズされれば’R’に、参照先変数がシリアライズデータに含まれていなければ、参照先の値がセットされます。(’r’は?)リソース型やクロージャはNGリソース型やクロージャは標準のserialize()ではシリアライズできません。シリアライズデータは見れば分かるシリアライズデータで身近なのは、セッションデータだと思うのですが、一見複雑そうなシリアライズデータでも開いてみると実は結構読めます。何より変数値はほぼそのまま入っているので、なんとなくでも内容を掴むことができます。PHPユーザならシリアライズデータを読むことは普通だと思うのですが、初日ということでBasicなネタにしてみました。