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