PHPによるオブジェクト指向プログラミング

「クラス」の定義

PHPにおいて「クラス」は、プロパティとメソッドを内部に保持する構造をしたオブジェクト型の変数であり、オブジェクトの構造を定義する。

[構文]クラスの定義

  class クラス名{
プロパティの定義
メソッドの定義
}

 

「プロパティ」の定義

プロパティの定義には「アクセス修飾子」を使う。
「アクセス修飾子」はクラス内で定義されたプロパティやメソッドに対する外部からのアクセスを制限する。

アクセス修飾子 内容
public どのクラスからでもアクセス可能
protected 現クラスと子クラスからのみアクセス可能
private 現クラス内でのみアクセス可能

[構文]プロパティの定義

  アクセス修飾子 プロパティ名

 

「メソッド」の定義

[構文]メソッドの定義

  アクセス修飾子 function メソッド名{
メソッドの処理
}

アクセス修飾子を省略した場合、規定値として「public」が設定される。

 

静的な「プロパティ」や「メソッド」の定義

静的なプロパティは、すべてのオブジェクトを通して同じ値を共有する場合に使う
静的なメソッドは、オブジェクトの持つプロパティを使わずに、すべてのオブジェクトを通して同様の処理を利用する場合に使う。
静的なメソッドやプロパティはオブジェクトを生成しなくても参照可能
プロパティ名やメソッド名の前に「static」を記述する。

[構文]静的なプロパティとメソッド

  static プロパティの定義
static function メソッド名
メソッドの処理
}

 

「クラス」の利用

オブジェクトの生成

「new」を使ってオブジェクトを生成する

[構文]オブジェクトの生成

  new クラス名

 

プロパティやメソッドの呼び出し

「アロー演算子(->)」で、生成したオブジェクトのプロパティやメソッドを呼び出す。

[構文]プロパティやメソッドの呼び出し

  オブジェクト名->オブジェクト内のプロパティ
オブジェクト名->オブジェクト内のメソッド

呼び出されているオブジェクト自身からプロパティやメソッドを呼び出すには、「$this」を使う。$thisは呼び出されているオブジェクト自身を指す。

[構文]$thisの呼び出し

  $this->オブジェクト内のプロパティ
$this->オブジェクト内のメソッド

 

静的なプロパティやメソッドの呼び出し

静的なプロパティやメソッドはオブジェクトを生成せずにクラスから直接プロパティやメソッドを呼び出す。
「スコープ定義演算子(::)」を使って呼び出す。

[構文]静的なプロパティやメソッドの呼び出し

  クラス名::クラス内の静的なプロパティ
クラス名::クラス内の静的なメソッド

static宣言された変数にクラス内でアクセスするには「self」を使う。
$thisだとエラーで失敗する。

[構文]「self」の呼び出し

  self::クラス内の静的なプロパティ
self::クラス内の静的なメソッド

 

オブジェクト定数

「オブジェクト定数」は、プロパティに定数を定義する。
オブジェクト定数は通常のプロパティの変数とは異なり、定義または使用する際に「$」記号を付けない
定数の前に「const」を記述して定義する。

[構文]オブジェクト定数

  class クラス名{
const オブジェクト定数の定義
}

オブジェクト定数の呼び出しには、静的なプロパティやメソッドの場合と同様に、「::」や「self」を使って呼び出す。
オブジェクト定数は、常にどこからでも呼び出すことができる。

 

コンストラクタとデストラクタ

コンストラクタ

「コンストラクタ」は、オブジェクトの生成時に呼び出されるメソッドで、オブジェクトの情報を初期化する。
コンストラクタには引数を与えることができ、引数に応じて初期化の情報を切り分けることが可能。

[構文]コンストラクタ

  function __construct(value){
コンストラクタの処理
}

※value … コンストラクタに渡す値

 

デストラクタ

「デストラクタ」は、オブジェクトの破棄時に呼び出されるメソッドで、オブジェクトに関連するデータを開放するために使う。

[構文]デストラクタ

  function __destruct(){
デストラクタの定義
}

 

クラスの「継承」

クラスの「継承」は、「親クラス」のプロパティとメソッドを引き継いだ「子クラス」を作る。
継承を行うには、classの記述の次に継承で作られる子クラス名を設定し、「extends」の記述の次に継承元の親クラス名を設定する。

[構文]クラスの継承

  class 子クラス名 extends 親クラス名{
クラス記述
}

 

オーバーライド

「オーバーライド」とは、親クラスを継承して作った子クラスで再定義すること。
親クラスと同じメソッド名のメソッドを子クラスで記述することで定義する。
オーバーライドを利用することによって、親クラスの処理に新たな処理を追加することや、まったく異なる処理に書き換えることができる。

 

final修飾子

「final修飾子」は、クラスやメソッドの定義時に設定することによって、クラスの継承やメソッドのオーバーライドを制限する。

[構文]final修飾子

  final クラス記述やメソッド記述

 

「インターフェイス」

インターフェイスの構文

「インターフェイス」ではメソッドの名称と引数のみを定義。
インターフェイスは、classの代わりに「interface」を記述して定義する。
インターフェイスのメソッドには、処理が定義されていないメソッドを宣言する。

[構文]インターフェイス

  interface クラス名{
メソッドの宣言
}

 

インターフェイスの定義

インターフェイスは、クラスに対してインターフェイスを定義することで使用する。
インターフェイスの定義は、インターフェイスを定義するクラス名の記述の後に「implements」を記述する。
複数のインターフェイスを定義するには、インターフェイス名を「,」で区切って定義する。

[構文]インターフェイス

  class クラス名 implements インターフェイス1, インターフェイス2{
メソッドの定義
}