PHP - クラス

公開日:2020-12-22 更新日:2020-12-22
[PHP]

1. 概要

クラスは、変数と関数をグループ化した型になります。

数値型は数値、文字列型は文字列、と言う値がありますが、
クラス(型)の場合は、クラスを実体化したインスタンス(オブジェクト)が値に該当します。

クラスからオブジェクトを生成するには、new と言うキーワードを使います。
生成されたオブジェクトは、数値や文字列などと同様に、変数に代入したりして、値として使うことができます。
オブジェクトは、クラスからいくつでも生成することができます。

また、クラス内の変数のことをプロパティ、関数のことをメソッドと呼びます。

2. 基本

プロパティとメソッドを1つずつ持っている例です。
// クラスの定義
class Test {
	// 定数
	public const MAX_VALUE = 999999;
	
    // プロパティ
    public $value = 0;

    // メソッド
    public function getValue() {
        return $this->value;
    }
}

// オブジェクトの生成
$obj1 = new Test();
$obj2 = new Test();

// プロパティの設定・取得
$obj1->value = 100000;
var_dump( $obj1->value );      // 100000
var_dump( $obj1->getValue() ); // 100000

// $obj2 の value は、$obj1 と異なる
var_dump( $obj2->value );      // 0

// 定数
var_dump( Test::MAX_VALUE );   // 999999
実行結果
int(100000)
int(100000)
int(0)
int(999999)

2.1 クラスの定義

クラスを定義するには、class の後ろにクラス名を付けて、
その後ろの { } 内で、プロパティやメソッドを定義します。
プロパティやメソッドは、複数定義できます。
書く順番に決まりはありませんが、プロパティを定義してから、メソッドを定義することが多いです。
(言語によっては、書く場所に意味がある場合もあるので要注意)
class クラス名 {
    // プロパティ
    // メソッド
}

2.2 プロパティの定義

クラスの { } 内に、public、private、protected、var と言うアクセス修飾子を付けた変数がプロパティになります。
プロパティは、宣言時に初期化しなくても問題ありません。
public    変数名 = 初期値;
private   変数名;
protected 変数名;
var       変数名;

public と var は、クラスの外部にプロパティを公開して、参照できるようにします。
(var は以前のバージョンのもので、public なのか private なのかがわからないため、使わない方が良いと思います)

private は、プロパティを非公開にします。
但し、直接参照できないだけで、クラス内のメソッドで参照して、その値を外部に返すことはできます。

protected は、外部には非公開にしますが、クラスの継承先には公開します。

このアクセス権は、メソッドにも付けることができます。

(参考)
ちなみに、クラス直下に定義している変数のことを、
クラス変数、インスタンス変数、メンバ変数とも呼びます。
クラス変数       = static な変数(クラスで1つだけ保持)
インスタンス変数 = static でない変数(オブジェクト毎に保持)
メンバ変数       = クラス変数とインスタンス変数

2.3 メソッドの定義

基本的には関数と同じです。
function の前にアクセス修飾子を付けることができます。付けない場合は、public になります。
(他の言語では、省略した場合は private になることが多いので要注意)

public function メソッド名() {
    return 戻り値;
}

2.4 プロパティの参照とメソッドの実行

プロパティを参照したり、メソッドを実行するには、
オブジェクトの入った変数の後ろに「->」を付けて、
その後ろにプロパティ名やメソッド名を付けます。
変数->プロパティ;
変数->メソッド()

外部から参照する場合は、生成したオブジェクトを代入した変数を使います。
$obj = new Test();
$obj->value = 100000;
$obj->getValue();

クラスの内部から参照する場合は、
クラスの自分自身のオブジェクトを表す「$this」を使います。
$this->value = 100000;
$this->getValue();

2.5 オブジェクトの生成

クラスからオブジェクトを生成するには、次のようにします。
$obj = new クラス名;
$obj = new クラス名();
$obj = new クラス名(引数1, 引数2, ... 引数n);
生成時に、引数を渡すことができますが、引数がない場合は、() を省略できます。

2.6 定数

定数はクラス内で定義することができます。
これにより、クラスに関連する定数をまとめることができます。
定数を使用する時は、「クラス名::」+ 定数名、とします。
class クラス名 {
  public const MAX_VALUE = 999999;
}

$value = クラス名::MAX_VALUE;