PHPでクラスを利用するための基礎知識

  • PHP
  • 現在地

ここでは、クラスの定義とオブジェクトの作成から、そこに含まれるメンバ変数やメソッドへアクセスするまでの、クラスを利用するうえでの基本部分を記述しておきます。

クラス(class)とは

クラス(class)というのは、複数の変数/定数/関数の固まりを、特殊な1つのオブジェクトとするために定義された型のことです。

よくクラスが設計図として例えられるのは、クラス自体には実体がなく、クラスを実体化したものからその構造を持つオブジェクトが作成されるためです。

クラス内の直下で定義された変数/定数/関数は、そのクラスによって作成されたオブジェクト(またはクラス自体)を経由しない限りアクセスできないことから、プロパティ / オブジェクト定数 / メソッドと呼ばれます。

他にもそれぞれ、メンバ変数やフィールド / クラス定数 / クラスメソッドという呼び方もされますが、とりあえずここでは上記の呼び方で統一することにします。

PHPでのクラスの定義からインスタンス化まで

いきなりですが、最初に例題から記述してみます。

  • class A{
    • protected $property = 'てすと';
    • function method(){
      • return $this->property;
    • }
  • }
  • $a = new A;
  • print $a->method();

この例題は、結果的に 'てすと' としか表示されないのですが、そこはどうでもよく、クラスの定義からインスタンスによるオブジェクトの作成までを行っています。(ついでにメソッドの実行も。)

ということで、ここから先はクラスの定義からオブジェクトの作成までの説明です。

クラスの定義

class クラス名 {}

クラス名の後の '{}' の中に、オブジェクトの構造となる変数/定数/関数を定義します。

クラスの継承による定義

class 継承先クラス extends 継承元クラス {}

extends で指定したクラスの構造を受け継いだクラスが定義されます。(継承元のクラスが、final宣言されている場合は不可。)

アクセス権が private に設定されている部分は継承されません。同名のプロパティなどがあれば、継承先の値で再定義されます。

クラスの構造を持つオブジェクトを作成

定義されたクラスを new演算子でインスタンス(実体)化し、変数に格納することで、そのクラスの構造を持つオブジェクトが作成されます。

$a = new A;

この場合、new演算子でオブジェクトとしてインスタンス(実体)化されたクラス A が、変数 $a に格納されます。

なお、クラス定義時の構造となる定数や関数は通常と同様の定義方法で構いませんが、変数のみ以下に記載するアクセス権による宣言が必要となります。

アクセス権の宣言

クラスのプロパティとなる変数は、どこからアクセス(呼び出し)できるかを決定するアクセス権を設定しつつ、宣言しなければなりません。

アクセス権の宣言は、public , protected , private のいずれかを、プロパティとなる変数の前に置いて行います。

メソッドにも設定できますが任意で、省略した場合は public となります。

public
クラス内外問わず、どこからでもアクセス可。
protected
クラス内,継承元(親)クラス,継承先(子)クラスのメソッドからアクセス可能。
private
そのクラス内のメソッド以外はアクセス不可。

なお、オブジェクト定数にはアクセス権の設定はできず、public と同様にどこからでもアクセスできます。

プロパティ/オブジェクト定数/メソッドへのアクセス

クラスによってオブジェクトが作成されても、その中身を呼び出せないと意味がないので、今回はアクセスする方法までを記載しておくことにします。

インスタンス化されたクラス内のプロパティ/オブジェクト定数/メソッドにアクセスする場合、アロー演算子(->)かスコープ演算子(::)をオブジェクトの後に付け、アクセス先を指定します。

どちらを使うかについては以下のようになっています。

アロー演算子(->)

アロー演算子は、オブジェクトが持つデータにアクセスする際に用いられます。(プロパティとメソッド)

$a->property

この場合 '$a' に格納されているクラスのプロパティ '$property' にアクセスします。

メソッドの場合でも同様に、アロー演算子でアクセスできます。なお、プロパティにアクセスする場合は、'$' を外して変数名のみ記述します。

スコープ演算子(::)

スコープ演算子は、クラスが持つ静的なデータにアクセスする際に用いられます。(オブジェクト定数と static 宣言されたプロパティとメソッド)

例えば、変数 $a に格納されているクラス自身の定数 'CONST' を参照してアクセスする場合、$a::CONST となります。

オブジェクト定数などの静的なデータは、インスタンス化されてもオブジェクト内の構造として持つわけでなく、クラス自身が持つデータであるためです。

静的なデータはクラス自身が持つデータのため、クラス名でもアクセスでき、例えば静的なプロパティを書き換えた場合、オブジェクトからアクセスしても書き換えられた値が返ってくることになります。

後書き

ここまで記述したように、クラスを利用することでPHPでも JavaScript のようなオブジェクト指向プログラミングが可能になります。

といっても、小規模の処理を行う場合はただ記述が増えるだけなのであまり意味がないですが、PHP5でXMLの処理を行うような場合DOMを扱うことになるので、今回は先にクラスとオブジェクトについて記述しておきました。

スポンサードリンク

inserted by FC2 system