static プロパティ・メソッド
テクノロジ系 / class-advanced (継承 / オーバーライド / abstract / interface / static / const / final)
static プロパティ・メソッド
Lesson 9 / Chapter 6
普通のプロパティはインスタンスごとに別
<?php
class User {
public string $name;
}
$a = new User();
$a->name = "A";
$b = new User();
$b->name = "B";
echo $a->name . "\n"; // A
echo $b->name . "\n"; // B- インスタンスを 2 つ作れば、
$nameも 2 つ存在する - でも「全インスタンスで共有する値」が欲しいときがある
static プロパティはクラスで 1 つだけ
<?php
class User {
public static int $count = 0;
}
User::$count = 5;
echo User::$count . "\n"; // 5staticを付けると クラス全体で 1 つ だけ存在する- インスタンスを作らなくても使える
- 外からは
ClassName::$プロパティ名で参照
クラス内からは self:: で参照
<?php
class User {
public static int $count = 0;
public function __construct() {
self::$count++;
}
}
new User();
new User();
new User();
echo User::$count . "\n"; // 3- クラスの中では
self::$countと書く - インスタンスを作るたびにコンストラクタで
++する User::$countは全インスタンスで共有されているので「合計人数」になる
static メソッドも書ける
<?php
class Calc {
public static function add(int $a, int $b): int {
return $a + $b;
}
}
echo Calc::add(2, 3) . "\n"; // 5static functionで定義- 呼び出しは
ClassName::method() - インスタンスを作らずに使える (ユーティリティ向き)
このチャプターでできるようになること
✅ static プロパティはクラスで 1 つだけ
✅ self::$name (中) / Class::$name (外) で参照できる
✅ static function でインスタンス不要のメソッドを定義できる
✅ インスタンス数カウンタなどに使える
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — User インスタンス数を数える
問題
User クラスを定義してください。
public static int $count = 0;を持つ- コンストラクタ
__construct()の中でself::$count++;する
User のインスタンスを 3 つ作ったあと、User::$count を 1 行出力してください。
期待される出力:
3
採点
php scripts/grade.php topics/class-advanced/ch06-static/drill/01-counter/
ヒント
- クラスの中では
self::$count++で増やす - クラスの外では
User::$countで参照 new User();を 3 回呼ぶ