作成日:2006/05/10
1L オブジェクト指向(PHP4)
PHPのオブジェクト指向はバージョンを重ねるに従い進化してきました。 本章では、PHP4のオブジェクト指向について説明します。 尚、PHP5ではオブジェクト指向が大幅に強化されています。
- PHP5で大幅に強化されたオブジェクト指向
- PHP5のオブジェクト指向はJavaと似ています。 特に単一継承やインターフェースの考え方などはJavaとそっくりです。
1L.1 クラスの概観
PHPのクラス定義はキーワードclassによって行います。
クラス定義の中ではメンバ変数とメンバ関数(メソッドとも呼ばれます)が定義できます。 PHP4ではコンストラクタ(但し、デストラクタは定義できません)、継承(単一継承)、シリアライズの機能が使えます。
PHP5ではデストラクタも使えます。
用例: クラスの定義
class Cart { // 買物かごクラス
var $todays; // 日付 // ←[A]
var $total=0; // 商品の総数 // ←[B]
var $items; // アイテムの配列(品番=>数量)
function Cart(){ // ←[A][C]
$this->todays = date("Y-m-d"); // ←[D]
$this->items = array();
}
function AddItem($no, $num){ // かごへ品番$noの商品を$num個入れる
$this->items[$no] += $num;
$this->total += $num;
}
function RemoveItem($no, $num){ // かごから品番$noの商品を$num個取出す
if (($this->items[$no])&&($this->items[$no] >= $num)) {
if (!($this->items[$no] -= $num)) unset($this->items[$no]);
$this->total -= $num;
return true;
} else {
return false;
}
}
function ShowItem(){ // かごの中身を見る
print_r($this->items);
}
}
$MyCart = new Cart; // 新しいかごを作る // ←[E]
$MyCart->AddItem('10',2); // 10番の商品を2つかごに入れる // ←[F]
-
メンバ変数は「 var 変数名 」で定義します。
メンバ関数は「 function 関数名 」で定義します。 -
メンバ変数の初期化は定数でのみ可能です(PHP5では式による初期化ができます)。
-
そのクラス名と同じ名前のメンバ関数はコンストラクタになります。
通常、メンバ変数の初期化コードはコンストラクタで書きます。 -
クラス定義の中でメンバ変数やメンバ関数を使う時は「 $this->変数名(または関数名) 」と書きます。
-
インスタンス(オブジェクト)を生成する場合は、new演算子を使います。
上例の場合は、インスタンスのコピーを代入しています。
通常、インスタンスは1つで良いので、リファレンスを使って次のように書く事ができます:
$MyCart =& new Cart;
-
オブジェクトのメンバ変数やメンバ関数にアクセスする場合は「 $オブジェクト名->変数名(または関数名) 」
と書きます。 -> の後には $ を付けません。但し、以下のような場合は可変変数に解釈されます:
$name = "total"; echo $MyCart->$name; // $MyCart->totalを表示します。
