PHP の高度な OOP テクノロジー
OOP の基本的な概念を理解した後、さらに高度なテクノロジーを紹介します。
シリアル化
PHP は永続オブジェクトをサポートしません。OOP では、永続オブジェクトは複数のアプリケーションで使用できます。参照。これは、オブジェクトをファイルまたはデータベースに保存し、後でオブジェクトをロードできることを意味します。これはいわゆるシリアル化メカニズムです。 PHP にはオブジェクトに対して呼び出すことができるシリアル化メソッドがあり、シリアル化メソッドはオブジェクトの文字列表現を返すことができます。ただし、シリアル化ではオブジェクトのメンバー データのみが保存され、メソッドは保存されません。
PHP4 では、オブジェクトを文字列 $s にシリアル化してからオブジェクトを解放し、オブジェクトを $obj に逆シリアル化すると、オブジェクトのメソッドを引き続き使用できます。これを行うことはお勧めしません。(a) ドキュメントには、この動作が将来のバージョンでも機能するという保証がないからです。 (b) これにより、シリアル化されたバージョンをディスクに保存してスクリプトを終了するときに、誤解が生じる可能性があります。文字列表現にはメソッドがまったく含まれていないため、後でこのスクリプトを実行するときに、オブジェクトを逆シリアル化するときにオブジェクトのメソッドが存在することは期待できません。
つまり、PHPのシリアル化はオブジェクトのメンバ変数を保存するのに非常に便利です。 (関連する配列や配列をファイルにシリアル化することもできます)。
例:
-------------------------------------- - ----------------------------------
$obj=new Classfoo();
$ str =serialize($obj);
// $str をディスクに保存します
// 数か月後
// str をディスクからロードします
$obj2=unserialize($str)
?>------ -- ------------------------------------------------ -- ------------------------
メンバー データは復元されましたが、メソッドは復元されませんでした (ドキュメントによると)。これにより、メンバー変数にアクセスするには $obj2->x を使用するような方法しかなくなります (他に方法はありません)。自宅では試さないでください。