関数による構造化は、長い処理をいくつかの小さな塊に整理することができます。が、もっと大きなプログラムになると、これだけではとても追いつかなくなってきます。例えば、ソースコードの中にずらりと1000個の関数が並んでいる状態を想像してみてください。これ、果たして「整理されてる」っていっていいんでしょうか?
1000個のメソッドを更に整理するにはどうすればいいか。まず考えるのは「関連するものをひとまとめにして扱えるようにする」ということでしょう。こうすれば、例えば「関連のある関数を20個ずつまとめたものが50個並ぶ」というなら、全体を把握することはできそうです。少なくとも1000個がずらりと並ぶよりだいぶマシですね。
関数はそれでいいとしても、今度はまた別の問題が発生するでしょう。それは「1000個のグローバル変数をどうするか」です。長いプログラムになれば、使用する変数も膨大なものになります。これまた、関係する変数をひとまとめにして整理出来ればずいぶんと違います。
つまり、構造化の次の段階で誰もが考えるのは、「関連する機能や値をひとまとめにして扱える仕組み」といってよいでしょう。
例えば「データアクセス」といったカタマリを用意して、その中にデータを読み書きしたり検索したり一部を置き換えたりするもろもろの機能を詰め込む。同時に、アクセスするデータファイルの名前とかデータの構造とかといった必要な情報をすべてその中に用意しておく。そして、必要に応じてそこに値を設定したり、そこにある機能を呼び出したりする。「データアクセスに関するすべてのデータや機能はみんなこの中にある」というようなカタマリを作ることが出来れば、ずいぶんと楽です。
こういうものを、さまざまな用途ごとに作って組み合わせていく。こうすれば、どんなにプログラムが大きくなっても対応できます。
これが「
オブジェクト」というものの考え方です。オブジェクトとは、「それ自身に必要なデータや機能がすべてそれ自身の中に用意されており、独立したプログラムとしてどこでも利用することができるカタマリ」です。
■オブジェクトの設計図「クラス」
この
オブジェクトというものは、PHPでは「
設計図」と「
作った部品」とから構成されます。まず最初に、オブジェクトの内容を定義した設計図を作り、その設計図をもとにして、実際に操作する部品を作る、というわけです。
この設計図のことを「
クラス」、
クラスから作られた部品の事を「
インスタンス」といいます。
クラスは、以下のような形で設計します。
class クラス {
フィールド1;
フィールド2;
……必要なだけ記述……
function メソッド1 ( 仮引数 ){
……実行する処理
}
function メソッド2 ( 仮引数 ){
……実行する処理
}
……必要なだけ記述……
}
クラスは「
フィールド」と「
メソッド」から構成されます。「
フィールド」というのは、クラスの中に値を保管するための
変数です。そして「
メソッド」は、クラスの中に用意する処理を記述した
関数です。この2つの要素を必要に応じて記述してクラスは作られます。
そして、作成した
クラスから
インスタンス(実際に操作するための部品)を作って、その中にある
フィールドや
メソッドにアクセスするには以下のようにします。
$変数 = new クラス( 引数 );
$変数->フィールド;
$変数->メソッド ( 引数 );
インスタンスは「
new クラス()」という形で作成します。
クラスによっては、この際に引数が必要な場合もあります。これで
インスタンスが作成され、変数に設定されます。
インスタンス内の
メソッドや
フィールドを操作する場合は、「
$変数->フィールド」「
$変数->メソッド()」という具合に、
インスタンスが代入された変数の後に「
->」という記号を付け、その後に
フィールド名や
メソッド名を記述します。
クラスについては、説明しなければならないことはまだまだ山のようにありますが、とりあえず「
クラスの定義の仕方」「
クラスから
インスタンスを作る方法」「
インスタンス内の
フィールドや
メソッドを利用する方法」さえわかれば、すぐにでもクラスを利用できるようになるはずです。