Serialize は、オブジェクトを含む変数を連続バイト データに変換できます。シリアル化された変数をファイルに保存したり、ネットワーク経由で送信したりして、逆シリアル化して戻すことができます。クラスのオブジェクトを逆シリアル化する前に定義したクラスの場合、PHP はそのオブジェクトのプロパティとメソッドを正常に保存できるため、この目的のために、PHP は自動的に __sleep とメソッドを検索します。 __ウェイクアップメソッド
オブジェクトがシリアル化されると、PHP は __sleep メソッドを呼び出します (存在する場合)。オブジェクトを逆シリアル化した後、PHP は __wakeup メソッドを呼び出します。どちらのメソッドも、必要なプロパティを含む配列を返す必要があります。 __sleep メソッドがない場合、PHP は他のプロパティの値を破棄します。
プログラムが実行される前に、serialize() 関数はまずマジック メソッド __sleep があるかどうかを確認し、存在する場合は __sleep() メソッドが最初に呼び出されます。
その後のみ、シリアル化 (シリアル化) 操作が実行されます。この関数を使用すると、オブジェクトをクリーンアップし、オブジェクト内のすべての変数の名前を含む配列を返すことができます。メソッドが何も返さない場合、NULL がシリアル化され、次のようになります。
E_NOTICE エラー。対照的に、unserialize() は __wakeup メソッドがあるかどうかを確認します。存在する場合は最初に呼び出されます
__wakeup メソッドでは、オブジェクトデータを事前に準備します。
__sleep メソッドは、コミットされていないデータや同様の操作を送信するためによく使用されます。また、非常に大きなオブジェクトがある場合は、 保存する必要がなく、とても便利な機能です。 __wakeup は、データベース接続の再確立やその他の初期化操作の実行など、逆シリアル化操作でよく使用されます。
リーリー
次の例は、__sleep メソッドと __wakeup メソッドを使用してオブジェクトをシリアル化する方法を示しています。Id 属性は、オブジェクトに保持されることを目的としていない一時的な属性です。__sleep メソッドは、id 属性がシリアル化されたオブジェクトに含まれていないことを保証します。 User オブジェクトを逆シリアル化するときに、__wakeup メソッドは id 属性の新しい値を確立します。実際の開発では、リソース (画像やデータ ストリームなど) を含むオブジェクトが必要になる場合があります。これらの方法。
例 3: __wakeup メソッドの欠陥に注意する必要があります。オブジェクトをシリアル化解除する予定がある場合は、
リーリー理由: $b オブジェクトは $name より前にシリアル化されていないため、B::__wakeup が実行されるとき、$a->name はまだ割り当てられていません。
したがって、クラス内で変数を定義する順序には注意してください。
元のアドレス: http://blog.sina.com.cn/s/blog_758ddcb90100yk05.html
。