|
オブジェクトのシリアライズ - セッション内でのオブジェクトserialize は、 PHP で保存できるあらゆる値をバイトストリームで表した文字列を返します。 unserialize を使うと、 この文字列から元の変数の値を取り出すことができます。 オブジェクトをシリアライズすると、オブジェクト内の変数もすべて保存されます。 オブジェクト内のメソッドは保存されません。 クラス名のみが保存されます。 オブジェクトを unserialize するには、 そのオブジェクトのクラスが定義されている必要があります。 A クラスのオブジェクトをシリアライズしたのなら、 その文字列にはクラス A とその中のすべての変数の値が含まれています。 別のファイルでそれを復元してクラス A のオブジェクトを取り出すには、 まずそのファイル内にクラス A の定義が存在しなければなりません。 これを実現するには、たとえばクラス A の定義を別ファイルに書き出してそれを include したり spl_autoload_register 関数を使ったりします。
アプリケーション内でオブジェクトをシリアライズして再利用する場合のお勧めは、 そのクラスの定義をアプリケーション全体で include することです。 クラスの定義が存在しなければオブジェクトの復元に失敗してしまいます。 その場合、PHP は __PHP_Incomplete_Class_Name クラスのオブジェクトを返します。このオブジェクトにはメソッドは一切なく、 使い道がなくなってしまいます。
つまり、もし上の例の $a を
スーパーグローバル $_SESSION
に新しいキーを追加してセッションに格納するなら、
page1.php と page2.php だけではなく
すべてのページで ここまでで説明した以外の方法として、オブジェクトのシリアライズや復元のイベントを __sleep() メソッドと __wakeup() メソッドでフックすることができます。 __sleep() を使うと、 オブジェクトの一部のプロパティだけをシリアライズすることもできます。 |