クラスとオブジェクト

PHPは、Java言語のような機能よりも少ないですが 「オブジェクト指向」 を扱うことができます。オブジェクト指向プログラミングは最近の主流ですが、PHPでも処理の対象(オブジェクト)を書くことによって、効率的に開発することが可能となっています。
オブジェクト指向とは
従来のプログラミングでは、処理の「手続き」を主体としていますが、オブジェクト指向は処理を「オブジェクト」という手法で用いられます。

手続き型プログラムと、オブジェクト方プログラムを対比させている図。手続きではそれぞれの処理プログラムが必要

手続き型プログラミングでは、ショッピングの際に商品を選んで決済までの手順で動作させていますが、更に違う商品や異なる手続きが必要な場合に、そのたびにプログラミングしなくてはなりません。
ところが、オブジェクト指向では、パラメータの値を変えるだけで、その後の処理はあらかじめ決められたメソッド(機能)を利用するだけで済みます。こうしたパラメータやメソッドはまるで1つの関数のように見えます。
もっと平たく言い換えれば、私たちが車を運転するときに、車に収められているエンジンとかトランスミッションとか、デファレンシャルなどというような機能や仕組みを知らなくても、キーをひねれば動かすことができます。つまり、オブジェクト指向とは、そういった一連の機能や仕組みを提供する「モノ」です。
こうしたオブジェクトを作成するためには、「クラス」と呼ばれるある種のテンプレート(雛形)を定義しなければなりません。
クラスの定義
クラスを定義するためには、メンバ変数 の宣言と メソッド の定義が含まれなければなりません。
メンバ変数とは、クラスで表現したいオブジェクトの「パラメータ」を格納するための変数となります。上記の図でいえば、「商品」や「金額」にあたります。
メソッドとは、機能を実現するための関数にあたります。この場合、メソッドは一般の関数とは異なり、あくまでクラスのオブジェクトの中でのみ有効になります。
  class Shopping {
     var $item = "コンピュータ";
     var $price = 99800;         // ここまでメンバ変数の設定

     function getTotal() {
       $tax = $this->price * 0.05;
       return $this->price + $tax;
      }                          // ここまでメソッドの定義
   } 
コメントにもあるように、このクラスでは、メンバ変数とメソッドを定義しています。当たり前ですが、メンバ変数のパラメータやメソッドは複数設定することができます。
クラスで定義した機能を利用するために、「オブジェクト」を生成しなければなりません。
オブジェクトの生成
定義したクラスを利用するためには newステートメントを使って、オブジェクトを生成しなければなりません。
  $変数 = new クラス名();
この1行によって、指定した変数にクラスから生成されたオブジェクトが格納されます。また、オブジェクトが持っているメンバ変数やメソッドを取り込むためには、以下のように記述します。
   $newShopping = new Shopping();
     $item = $newShopping->item
メンバ変数に格納されている $item では、もともと「コンピュータ」が定義されていましたが、このようにして、その内容を随時変更することができます。さらに決済に必要なメソッドを取り出す場合にも、以下のように設定します。
  class Shopping {
   var $item =  "コンピュータ";
   var $price = 99800;

   function getTotal() {
     $tax = $this->price * 0.05;
     return $this->price + $tax;   // 税込価格の設定
    }
  } 

  $result = new Shopping();
  $item = $result->item;
   print("$item の会計は".$result->getTotal()."円になります\n");
クラスを利用するオブジェクトでは、メンバ関数で値が設定されていても、後でその値を変更することが可能です。つまり、閲覧者からの入力によって、簡単に商品や価格などを変更できる利点があります。
上記スクリプトの実行結果 → クラスのサンプル


This Page is HTML4.01 Valid! 初版公開日 2004年1月18日   最新更新日 2007年12月17日
Copyright(C) 2002〜2007 banban@scollabo.com