各クラスの定義は、classキーワードで始まり、クラス名が続きます。
クラス名には、PHPの予約語以外のあらゆる名前を
使用することができます。
波括弧の中に、クラスのメンバーとメソッドの定義が記述されます。
各メソッドの中には、スタティック
メソッドを除き、疑似変数 $this が使用可能です。
$this は、そのメソッドをコールしたのと同じインスタンスへの
リファレンスです。
例 19-1. 簡単なクラス定義
<?php class SimpleClass { // メンバ宣言 public $var = 'a default value';
// メソッド宣言 public function displayVar() { echo $this->var; } } ?>
|
|
あるオブジェクトのインスタンスを生成する際、新たにオブジェクトが作成され、
変数に代入される必要があります。
新しいオブジェクトが作成される際には、そのオブジェクトが
エラー時に 例外を投げる
よう定義された
コンストラクタを有していない限り、
常にオブジェクトが代入されます。
例 19-2. インスタンスを作成する
<?php $instance = new SimpleClass() ?>
|
|
作成済みのオブジェクトのインスタンスを新たな変数に代入する場合、新しい変数は、
代入されたオブジェクトと同じインスタンスにアクセスします。
この動作は、インスタンスを関数に渡す場合も同様です。
作成済みのオブジェクトの新規インスタンスは、その
クローンを作成 することに
より作成可能です。
例 19-3. オブジェクトの代入
<?php $assigned = $instance; $reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance と $reference は null になります
var_dump($instance); var_dump($reference); var_dump($assigned); ?>
|
上の例の出力は以下となります: NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
} |
|
クラスは、宣言部にextendsキーワードを含めることで、他のクラスのメソッドとメソッドと
メンバーを継承することができます。他重継承を行うことはできず、クラスが継承できるベース
クラスは一つだけです。
継承されたメソッドとメンバーは、親クラスで final
としてメソッドが定義されていない限り、親クラスで定義されたのと同じ名前で再度宣言を行うことで
オーバーロードすることができます。
parent::で参照することにより、
このオーバーロードされたメソッドまたはメンバーにアクセスすることができます。
例 19-4. 簡単なクラスの継承
<?php class ExtendClass extends SimpleClass { // 親クラスのメソッドを再定義 function displayVar() { echo "Extending class\n"; parent::displayVar(); } }
$extended = new ExtendClass(); $extended->displayVar(); ?>
|
上の例の出力は以下となります: Extending class
a default value |
|