第10章 オブジェクト指向構文 / 第3回 模擬試験
PHPのクラスの静的メンバーに関する次の記述のうち、正しいものはどれか。
静的プロパティにアクセスするには`::`(スコープ解決演算子)を使う。
正解
静的メソッド内では`$this`を使ってインスタンスにアクセスできる。
静的プロパティは、インスタンスごとに異なる値を持つ。
静的メソッドはインスタンス化しないと呼び出せない。
解説
静的(`static`)プロパティやメソッドには、インスタンスを介さず`ClassName::$property`や`ClassName::method()`のように、スコープ解決演算子`::`を使ってアクセスします。
他の選択肢が誤りである理由は次の通りです。
・`$this`は「特定のインスタンス」を指す疑似変数のため、インスタンスに紐付かない静的メソッド内では使用できません(使おうとするとエラーになります)。
・静的プロパティはクラス全体で1つだけ存在し、すべてのインスタンスで共有されます。あるインスタンス経由で値を変えると、他のインスタンスからも変更後の値が見えます。
・静的メソッドは`ClassName::method()`のように、インスタンス化せずに直接呼び出せます。
例:
```
class Counter {
public static int $count = 0;
public static function increment(): void {
self::$count++;
}
}
Counter::increment();
Counter::increment();
echo Counter::$count; // 2
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.1.6〜10.1.7節 静的メソッド/静的プロパティ p.485〜488)