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 クラス()のような形で作成する。クラスによっては、このとき引数が必要な場合もある。これにより、インスタンスが生成されて変数に設定される。インスタンスのメソッドやフィールドを操作する場合は、$変数->フィールド$変数->メソッド()のように、インスタンスが代入された変数の後に->という記号を付け、そのフィールド名やメソッド名を書く。

クラスについては、まだ説明しなければならないことが山ほどある。しかしまずは「クラスの定義方法」「クラスからインスタンスを作る方法」「インスタンスのフィールドやメソッドを利用する方法」を理解すれば、すぐにでもクラスを利用できるようになるだろう。