(1/3)「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。最終回は、「永続化インスタンス」の必要性とserialize、unserialize関数、インスタンスと「参照」、「浅い」コピーと「深い」コピー、cloneキーワード、マジックメソッド「__sleep()」「__wakeup()」「__clone」などについて解説。「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する本連載。今までは下記のように、PHPを例としたオブジェクト指向について学んできました。今回は、いよいよ最終回。インスタンスの保存の仕方やコピーの仕方などを解説します。「永続化インスタンス」の必要性とserialize、unserialize関数プログラム中で作成したインスタンスは、当然ですが「プログラムの終了」とともにメモリから解放されて、霧散します。通常はそれでもよいのですが、インスタンスによっては「情報を保持して、持ち回りたい」ものも少なからず存在します。ECサイト作成時の「買い物かごクラス」は可能であれば「(購入が終わるまでは)持ち回りたい」インスタンスでしょうし、ゲーム作成中の「敵を意味するインスタンス」もまた、state(状態:典型的には、残HPなど)などを保持している観点から「『敵が倒れるまでは持ち回りたい』インスタンスである」といえます。「永続インスタンス」というような呼称で、Javaの世界などでは、割と以前からこの「持ち回りたいインスタンス」を扱ってきました。ニーズとしては同様のものがあることから、PHPでも、「serialize()」「unserialize()」関数を使って、そのようなことが可能になります。serialize()、unserialize()の実装を確認してみましょう。unserialize($s);var_dump($obj2);リスト1serialize関数によって、インスタンスが「一本の文字列」になります。文字列になるために、例えば「DBに保存する」などを含めて、情報の保持が極めて容易になります。その文字列をunserialize関数に渡すと、元の状態(インスタンス)に戻ります。serialize関数は、インスタンスだけではなく配列も扱えます。unserialize($s);var_dump($awk2);リスト2あまりむやみにインスタンスを永続化すると情報の保持にコストが掛かってしまいますが、適切な箇所で扱うと大変に便利なのも事実です。「状態を扱うインスタンス」は、比較的、永続化するのに都合が良い場合が多いので、こういった手法を少しでも知っておくと、設計や実装の幅が広がるでしょう。便利なserializeですが、「保存ができない値」があります。一つは「リソース型」と言われる変数型の値で、典型的にはDBハンドルやファイルハンドルが該当します。「保存可能な値」であっても、「特に保存をする必要がない値」である場合も存在すると思います。そのような場合の中でも、時には「serializeの対象にしたいプロパティ」「unserializeのときに復元したい値」を恣意的に操作したいケースがあります。そのような状況で、「__sleep()」「__wakeup()」を使うとよいでしょう。__sleep()マジックメソッドの使い方を見てみます。NULL}結果3__sleepは、serialize関数が呼ばれるタイミングで自動的にcallされます。__sleepは「その戻り値として返したプロパティ名だけをserializeするようにserialize関数に依頼をする」機能があります。そのため、結果3の場合、「$k_」だけが「シリアライズされず」に復元されています(17行目)。このように、__sleepを使うことで、シリアライズできないリソース型の変数や、シリアライズ不要な変数を、シリアライズの対象外にするように働き掛けることができます。unserialize関数が呼ばれるタイミングで起動するのが、__wakeupです。厳密には「unserialize関数が実行された直後」に呼ばれます。そのため、「unserialize関数によって復元した値を使う」ことも可能です。実装を見てみましょう。int(11)}結果4このように「内部の値を再計算する」「DBハンドルなどを再取得する」などの使われ方が多いと思います。この2つのマジックメソッドを使うことで、serializeやunserializeを「より自在に」使えるようになります。初心者がPHPプログラミングを始めるための基礎知識とXAMPPのインストールオープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。7.1含め2017年の情報に合うように対応、XAMPP環境構築を追記】。ソースをダウンロード今回からPHPのビルドとインストールに入ります。PHPという言語の概要と、ソースコードの入手法を解説します(編集部)理論編:PHPについて知ろうスクリプトを記述するだけの簡単なプログラミングで、Web対応の高速なデータベースアプリケーションを実現する手法としてPHPが急速に注目を集めている。データベースはオープンソースのPostgreSQLだけでなく、Oracleなどの商用データベースも扱える。ここでは、5月にバージョンアップしたばかりのPHP4によるWeb-DBシステム構築法を紹介しよう。X+PHPでオールインワン環境(インストール編):Mac内にPHP4、5、6を同居させるコツPHP4の開発は終了したが、移行の問題は残されている。vol.11」が開催された。今回のレポートでは、「自分をプログラミング言語に例える」というお題に答えた5人の技術者の回答をみていく。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。