PHP マニュアル
前のページ | 第 19章クラスとオブジェクト (PHP 5) | 次のページ

# クラスの基礎

## class

各クラスの定義は、classキーワードで始まり、クラス名が続きます。 クラス名には、PHPの予約語以外のあらゆる名前を 使用することができます。 波括弧の中に、クラスのメンバーとメソッドの定義が記述されます。 メソッドがオブジェクトコンテキストからコールされる場合 (通常は、メソッドが属するオブジェクトですが、 メソッドが第二のオブジェクトのオブジェクトの コンテキストから スタティックに コールされる場合には、別のオブジェクトとなる場合もあります)、 疑似変数 `$this` が利用可能です。 以下にこの例を示します。

例 19-1. オブジェクト指向言語における `$this` 変数

`<?php class A { function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")\n"; } else { echo "\$this is not defined.\n"; } } } class B { function bar() { A::foo(); } } $a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>`

上の例の出力は以下となります。

    $this is defined (a)
    $this is not defined.
    $this is defined (b)
    $this is not defined.

例 19-2. 簡単なクラス定義

`<?php class SimpleClass { // メンバ宣言 public $var = 'a default value'; // メソッド宣言 public function displayVar() { echo $this->var; } } ?>`

デフォルト値は定数でなければなりません。(たとえば) 変数、クラスのメンバあるいは関数コールなどは使用できません。

例 19-3. クラスのメンバのデフォルト値

`<?php class SimpleClass { // 無効な形式のメンバ宣言 public $var1 = 'hello '.'world'; public $var2 = <<<EOD hello world EOD; public $var3 = 1+2; public $var4 = self::myStaticMethod(); public $var5 = $myVar; // 有効な宣言 public $var6 = myConstant; public $var7 = self::classConstant; public $var8 = array(true, false); } ?>`

> 注意: クラスやオブジェクトを扱うための、便利な関数があります。 クラス/オブジェクト関数 を参照ください。

## new

あるクラスのインスタンスを生成する際、新たにオブジェクトが作成され、 変数に代入される必要があります。 新しいオブジェクトが作成される際には、そのオブジェクトが エラー時に 例外を投げる よう定義された コンストラクタを有していない限り、 常にオブジェクトが代入されます。 クラスは、そのインスタンスを作成する前に定義すべきです (これが必須となる場合もあります)。

例 19-4. インスタンスを作成する

`<?php $instance = new SimpleClass(); ?>`

作成済みのクラスのインスタンスを新たな変数に代入する場合、新しい変数は、 代入されたオブジェクトと同じインスタンスにアクセスします。 この動作は、インスタンスを関数に渡す場合も同様です。 作成済みのオブジェクトのコピーは、その クローンを作成 することにより作成可能です。

例 19-5. オブジェクトの代入

`<?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

クラスは、宣言部にextendsキーワードを含めることで、他のクラスのメソッドとメソッドと メンバーを継承することができます。他重継承を行うことはできず、クラスが継承できるベース クラスは一つだけです。

継承されたメソッドとメンバーは、親クラスで final としてメソッドが定義されていない限り、親クラスで定義されたのと同じ名前で 再度宣言を行うことでオーバーライドすることができます。 parent::で 参照することにより、このオーバーライドされたメソッドまたはメンバーに アクセスすることができます。

例 19-6. 簡単なクラスの継承

`<?php class ExtendClass extends SimpleClass { // 親クラスのメソッドを再定義 function displayVar() { echo "Extending class\n"; parent::displayVar(); } } $extended = new ExtendClass(); $extended->displayVar(); ?>`

上の例の出力は以下となります。

    Extending class
    a default value

前のページ | ホーム | 次のページ
クラスとオブジェクト (PHP 5) | 上に戻る | オブジェクトのオートローディング