オブジェクトのシリアル化についてのメモ
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で変数指定を調整すればデータ量も最小限に抑えられそうですし、なかなか良さげです。
- 3キャリア別にフォーム入力モードを切り替えるカスタムヘルパー - 2009年4月03日
- askeet 4日目 - 2009年2月24日
- symfonyでPDO接続をする - 2009年2月18日
- PEAR::HTTP_Requestでタイムアウト時間を指定する - 2008年8月23日
- Amazonランキングのカテゴリー切り替え - 2008年3月06日
トラックバック(0)
このブログ記事を参照しているブログ一覧: オブジェクトのシリアル化についてのメモ
このブログ記事に対するトラックバックURL: http://blog.knockoutmarch.com/mt3/mt-tb.cgi/204
コメントする