PHP - クラス - アクセサー
公開日:2020-12-22 更新日:2020-12-22
[PHP]
1. 概要
プロパティにアクセスするためのアクセサーについてです。
プロパティの取得や設定を行うメソッドのことを、アクセサーと呼びます。
設定するメソッドをセッター(setter)、取得するメソッドをゲッター(getter)と呼びます。
メソッド名は、「set」+ プロパティ名、「get」+ プロパティ名、とすることが多いです。
言語によっては、プロパティにアクセスすると、自動的にアクセサーを使ってくれる場合もありますが、
PHPの場合は、アクセサーがある場合は、プロパティを直接参照せずに、自分でアクセサーを使う必要があります。
また、public なプロパティは、外部から取得や設定が自由に行えますが、
アクセサーを使うと、読み取り専用のプロパティや、設定できる値を制限するプロパティを作成できます。
プロパティの取得や設定を行うメソッドのことを、アクセサーと呼びます。
設定するメソッドをセッター(setter)、取得するメソッドをゲッター(getter)と呼びます。
メソッド名は、「set」+ プロパティ名、「get」+ プロパティ名、とすることが多いです。
言語によっては、プロパティにアクセスすると、自動的にアクセサーを使ってくれる場合もありますが、
PHPの場合は、アクセサーがある場合は、プロパティを直接参照せずに、自分でアクセサーを使う必要があります。
また、public なプロパティは、外部から取得や設定が自由に行えますが、
アクセサーを使うと、読み取り専用のプロパティや、設定できる値を制限するプロパティを作成できます。
2. setter による値の制限
次の例では、setValue() で制限をかけることにより、
$value が 0 ~ 100 であることを保証しています。
これにより、$value を使う各メソッドごとに、値の範囲チェックをする必要がなくなります。
$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 はプロパティの取得が主な処理ですが、このように値を設定したり、他の処理をする場合もあります。
また、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)