ch06 8章中 6章目

ch06 — static プロパティ・メソッド

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch06 — static プロパティ・メソッド」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch06 — static プロパティ・メソッド」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch06 — static プロパティ・メソッド」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

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 をインスタンス生成ごとにインクリメントする

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. static プロパティ・メソッド

    Lesson 9 / Chapter 6

  2. 普通のプロパティはインスタンスごとに別

    <?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 つ存在する
    • でも「全インスタンスで共有する値」が欲しいときがある
  3. static プロパティはクラスで 1 つだけ

    <?php
    class User {
        public static int $count = 0;
    }
    
    User::$count = 5;
    echo User::$count . "\n";  // 5
    • static を付けると クラス全体で 1 つ だけ存在する
    • インスタンスを作らなくても使える
    • 外からは ClassName::$プロパティ名 で参照
  4. クラス内からは 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 は全インスタンスで共有されているので「合計人数」になる
  5. static メソッドも書ける

    <?php
    class Calc {
        public static function add(int $a, int $b): int {
            return $a + $b;
        }
    }
    
    echo Calc::add(2, 3) . "\n";  // 5
    • static function で定義
    • 呼び出しは ClassName::method()
    • インスタンスを作らずに使える (ユーティリティ向き)
  6. このチャプターでできるようになること

    static プロパティはクラスで 1 つだけ ✅ self::$name (中) / Class::$name (外) で参照できる ✅ static function でインスタンス不要のメソッドを定義できる ✅ インスタンス数カウンタなどに使える

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

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";  // 5
  • static を付けると クラス全体で 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";  // 5
  • static function で定義
  • 呼び出しは ClassName::method()
  • インスタンスを作らずに使える (ユーティリティ向き)

このチャプターでできるようになること

static プロパティはクラスで 1 つだけ ✅ self::$name (中) / Class::$name (外) で参照できる ✅ static function でインスタンス不要のメソッドを定義できる ✅ インスタンス数カウンタなどに使える

→ ドリルへ

この章で取り組む 演習問題の流れ (1ステップ)
  1. 01 ドリル 01 — User インスタンス数を数える README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — User インスタンス数を数える

問題

User クラスを定義してください。

  • public static int $count = 0; を持つ
  • コンストラクタ __construct() の中で self::$count++; する

User のインスタンスを 3 つ作ったあと、User::$count を 1 行出力してください。

期待される出力:

3

ヒント

  • クラスの中では self::$count++ で増やす
  • クラスの外では User::$count で参照
  • new User(); を 3 回呼ぶ

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — User インスタンス数を数える

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます