特殊関数__sleep および __wakeup (クラスとオブジェクト (PHP 4)) - PHPプロ!マニュアル

PHPマニュアル

特殊関数__sleep および __wakeup

特殊関数__sleep および __wakeup

serialize() は、クラスに特殊な名前 __sleep の関数があるかどうかを調べます。 もしあれば、シリアル化の前にその関数を実行します。 この関数で、オブジェクトをクリアすることができます。 またこの関数は、シリアル化するオブジェクトについて、 すべての変数の名前を配列で返すことが前提となっています。 このメソッドが何も返さなかった場合は、NULL がシリアル化され、E_NOTICE が発生します。

典型的な __sleep の使用法は、 途中のデータをコミットしたり、 似たようなタスクのクリアを行うといったものです。 また、オブジェクトが非常に大きく、かつ、完全に保存する必要がない場合、 この関数が有用です。

逆に、 unserialize() は、特殊な名前 __wakeup を有する関数が存在するかどうかを確認し ます。これが存在する場合、この関数は、そのオブジェクトが有する全て のリソースを再構築することが可能です。

典型的な__wakeupの使用法は、シリアル化により失っ たデータベース接続を全て再度復旧したり、その他の再初期化作業を実行 したりといったものです。


PHPマニュアル



Pick Up Q&A

Q
セッションがいいのか、それともデータベースがいいのか教えて下さい。
 このエントリーをはてなブックマークに追加 
A
>ボタンをクリックしたら選んだ商品情報を持っておきたいと思っています。 そのくらいのことならセッションもしくはCookie(期限短め:場合によってはブラウザ閉じるまで)でいいんじゃないですかね。 #わ...

>>続きを読む

一つの目安として、ECサイトの購入情報など絶対に消えてはいけないものはDBに、カートなどの一時的に使用する情報や、ユーザに任意のタイミングで消去されても構わないものはセッションにと使い分けるといいでしょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)