PHP - クラス - アクセサー

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

1. 概要

プロパティにアクセスするためのアクセサーについてです。
プロパティの取得や設定を行うメソッドのことを、アクセサーと呼びます。
設定するメソッドをセッター(setter)、取得するメソッドをゲッター(getter)と呼びます。
メソッド名は、「set」+ プロパティ名、「get」+ プロパティ名、とすることが多いです。
言語によっては、プロパティにアクセスすると、自動的にアクセサーを使ってくれる場合もありますが、
PHPの場合は、アクセサーがある場合は、プロパティを直接参照せずに、自分でアクセサーを使う必要があります。

また、public なプロパティは、外部から取得や設定が自由に行えますが、
アクセサーを使うと、読み取り専用のプロパティや、設定できる値を制限するプロパティを作成できます。

2. setter による値の制限

次の例では、setValue() で制限をかけることにより、
$value が 0 ~ 100 であることを保証しています。
これにより、$value を使う各メソッドごとに、値の範囲チェックをする必要がなくなります。
class Test {
    private $value = 0;

    public function setValue($value) {
        if ($value > 100) $value = 100;
        if ($value <   0) $value =   0;
        
        $this->value = $value;
    }

    public function getValue() {
        return $this->value;
    }
}

$obj = new Test();
$obj->setValue(10000000);
var_dump( $obj->getValue() );
実行結果
int(100)

3. 読み取り専用プロパティ(read only)

$count の getter のみ用意することで、読み取り専用のプロパティを作成することができます。
また、getter の中で、$count を増加させています。
getter はプロパティの取得が主な処理ですが、このように値を設定したり、他の処理をする場合もあります。
class Counter {
    private $count = 0;
    public function getCount() {
        $this->count = $this->count + 1;
        return $this->count;
    }
}

$obj = new Counter();

var_dump( $obj->getCount() );
var_dump( $obj->getCount() );
var_dump( $obj->getCount() );
実行結果
int(1)
int(2)
int(3)