クラスは、注)プロパティ(メンバ変数)と注)メソッドから構成されます。プロパティ=変数、メソッド=関数と考えると分かり易いかもしれません。
クラスの定義には、classというキーワードを使用し、続けて定義するクラス名を指定します。クラス名を指定したら、そのクラスのプロパティ(メンバ変数)と、メソッドを定義します。
クラスで表現したいオブジェクトの「パラメータ」を格納するための変数にあたります。例えば、私たち「人間」をクラスとすると、「性別」、「年齢」、「血液型」がプロパティにあたります。
機能を実現するための関数にあたります。メソッドは一般の関数とは異なり、あくまでクラスのオブジェクトの中でのみ有効になります。例えば、私たち「人間」をクラスとすると、「食べる」、「走る」、「寝る」がメソッドにあたります。
<?php
// クラスsansuを定義する
class sansu {
// プロパティを定義する
var $result;
// メソッドkakezanを定義する
function kakezan( $number ) {
return $this->result = $number * 100;
}
}
// インスタンスを作成する
$jsansu = new sansu;
echo $jsansu->kakezan( 7 );
?>
上記のスクリプトでは、classというキーワードに続けてsansuというクラス名を指定しています。次に、注)varを付けてプロパティを定義し、クラス全体で使用できるようにします。
メソッドkakezanを定義している中に、「$this->result」と記述ありますが、これはsansuクラス内からresultプロパティを呼び出す、という意味です。「$this->」は、自分自身を表し、「$this->プロパティ名」で同一クラス内からプロパティを呼び出すことができます。
700
プロパティを定義するときには、プロパティ名だけでなく、アクセス制限設定も同時に行うことができます。アクセス制限とは、PHP5から新たに導入されたもので、プロパティがクラス外からアクセス可能かどうかを決定するものです。PHP5では、プロパティの定義にvarを使用せずに、「public」、「private」、「protected」の修飾子を使用することが推奨されています。なお、アクセス制限の指定を省略した場合は、publicを指定したとみなされます。
| 修飾子 | 説明 |
|---|---|
| public | どこからでもアクセス可能 |
| protected | 同一クラスおよび派生クラスからアクセス可能 |
| private | 同一クラスからのみアクセス可能 |
作成したクラスを実行するには、注)インスタンスを作成しなければなりません。インスタンスを作成するには、newというキーワードを使います。
インスタンスとは、クラスから生成されるデータ群のことです。クラスは定義が書かれているだけの雛型のようなもので、インスタンスを生成することで、実際にデータを扱うことが可能になります。人間クラス(人間という集合)のインスタンス(実例、実際の要素)はAさん、というような感じになります。
// インスタンスを作成する
$jsansu = new sansu;
上記の定義により、$jsansuがインスタンスとなります。そして、この$jsansuを使用して、クラスで定義したプロパティやメソッドを利用します。
echo $jsansu->kakezan( 7 );
つまり、kakezanメソッドを呼び出すには、自分自身を表す->という記述を用いて、上記のように記述します。
継承とは、あるクラスのプロパティ、メソッドを引き継ぐことをいいます。継承により新しく作成されたクラスでは、継承されたクラスから引き継いだプロパティ、メソッドを定義しなくても使用することができます。
継承によって新しく作成するクラスをサブクラス(子クラス、派生クラス)、それに対して継承される側のクラスをスーパークラス(親クラス、基底クラス、基本クラス)と呼びます。
<?php
// クラスsansuを定義する
class sansu {
// プロパティを定義する
var $result;
// メソッドkakezanを定義する
function kakezan( $number ) {
return $this->result = $number * 100;
}
}
// sansuクラスを継承する
class keisyou_sansu extends sansu {
var $result2;
var $result3;
var $result4;
function tashizan( $number ) {
return $this->result2 = $number + 100;
}
function hikizan( $number ) {
return $this->result3 = $number - 100;
}
function warizan( $number ) {
return $this->result4 = $number / 100;
}
}
// インスタンスを作成する
$jsansu = new keisyou_sansu;
echo $jsansu->kakezan( 5 ), "<br />n";
echo $jsansu->tashizan( 7 ), "<br />n";
echo $jsansu->hikizan( 300 ), "<br />n";
echo $jsansu->warizan( 200 ), "<br />n";
?>
上記のスクリプトでは、作成したsansuクラスを、extendsというキーワードで継承して、keisyou_sansuというサブクラスを作成しています。続けて、継承した掛け算メソッド、kakezanに加えて、足し算(tashizan)、引き算(hikizan)、割り算(warizan)が行えるメソッドを定義しています。
500 107 200 2
「$jsansu = new keisyou_sansu;」でクラスのインスタンスが作成され、「tashizan」、「hikizan」「warizan」が使用可能になり、「$jsansu->kakezan( 5 )」、「$jsansu->tashizan( 7 )」、「$jsansu->hikizan( 300 )」、「$jsansu->warizan( 200 )」から()内の数字が計算されています。その計算結果がそれぞれ、「500」、「107」、「200」、「2」となっています。