オブジェクトのシリアル化についてのメモ

symfonyでライブラリクラスから生成したオブジェクトをserializeして保持する処理を考えていた時の作業録。

You cannot serialize or unserialize PDO instances

まず、オブジェクトをserializeしようとしたら上記エラーが出てしまいました。内部でDBのconnectionを持っている状態でserializeはできないようです。

とりあえず暫定策として__sleep関数を使って、必要なメンバ変数のみ取得できるようにして回避。

  public function __sleep()
  {
    // シリアル化する対象の変数を指定
    return array("id", "name", "email");
  }

serializeデータにはクラス名と変数の情報しか保持していないので、データをunserializeして使う際にはスクリプト内で事前にクラス定義がされている必要があるようですが(PHP: オブジェクトのシリアル化 - セッションでのオブジェクト - Manual)、symfonyだとオートロードなのでその辺は意識しなくとも使えました。

$unserialize = unserialize($serialize);

//オブジェクトで持っていたメソッドが使える
echo $unserialize->getName();

__sleepで変数指定を調整すればデータ量も最小限に抑えられそうですし、なかなか良さげです。

関連記事

トラックバック(0)

このブログ記事を参照しているブログ一覧: オブジェクトのシリアル化についてのメモ

このブログ記事に対するトラックバックURL: http://blog.knockoutmarch.com/mt3/mt-tb.cgi/204

コメントする

このブログ記事について

このページは、ko31が2009年3月12日 03:38に書いたブログ記事です。

ひとつ前のブログ記事は「askeet 4日目」です。

次のブログ記事は「段ボール電車「Dan-Train 3000形」を買ってみました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

RSSフィード

  • 購読する

いろいろ

あわせて読みたい

フィードメーター - ポップフライ

seo

Powered by Movable Type 4.01