概要
static プロパティは インスタンスごとに別々に持つのではなく、クラス全体で 1 つだけ共有される値 だ。通常のプロパティ (public $name) は $a と $b を作ると別々の name を持つが、public static $count は $a も $b も同じ $count を共有する。インスタンスを何個作ったかを数えるカウンタや、クラス全体で使う設定値など「インスタンス間で共通の記録」を持たせる用途で使われる。
参照の書き方は クラス内からは self::$name、クラス外からは ClassName::$name で、いずれも -> ではなく :: (スコープ解決演算子) を使う。static メソッドも同様に ClassName::method() の形で呼び出せて、インスタンスを作らずに呼べる。これは「ユーティリティ関数の集まり」のようなクラス (Math::sqrt(2) 的なもの) を作るときに便利だが、状態を持つ static は テストが書きにくい / 副作用が追いにくい という弱点もある。
補足として PHP には self:: と static:: の違いがあり、これは 遅延静的束縛 (late static binding) という機能。self:: は「書かれているクラス」を、static:: は「呼び出されたクラス」を指すので、継承して使うときに挙動が変わる。本章では self:: を使う基本パターンに留め、static:: は必要になったときに調べる程度の認識でよい。
学習目標
staticプロパティはインスタンスごとではなく クラス全体で 1 つ 共有されるself::$nameでクラス内から、ClassName::$nameで外から参照できる- インスタンス数カウンタなど「クラスの記録」を持たせられる
ドリル
| no | 内容 |
|---|---|
| 01 | User::$count をインスタンス生成ごとにインクリメントする |
📝 演習: ドリル 01 — User インスタンス数を数える
問題
User クラスを定義してください。
public static int $count = 0;を持つ- コンストラクタ
__construct()の中でself::$count++;する
User のインスタンスを 3 つ作ったあと、User::$count を 1 行出力してください。
期待される出力:
3ヒント
- クラスの中では
self::$count++で増やす - クラスの外では
User::$countで参照 new User();を 3 回呼ぶ