ch07 8章中 7章目

ch07 — クラス定数 (const)

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch07 — クラス定数 (const)」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch07 — クラス定数 (const)」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch07 — クラス定数 (const)」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

クラス定数は 「クラスに紐付いた変更できない値」 で、class Config { const VERSION = "1.0"; } のように const キーワードで宣言する。インスタンスを作らずに Config::VERSION の形で参照でき、static プロパティと違って 代入で書き換えることが一切できない。バージョン番号・上限値・状態名 (STATUS_ACTIVE 等) のような「コードを書いた時点で確定していて、実行中に変わらない値」を集約しておく場所として使う。

書き方は const NAME = 値; で、クラスの { } の中に置く。値には数値・文字列・配列・他の定数式が書ける。外から参照するときは ClassName::NAME、クラス内からは self::NAME の形で、static プロパティと違って $ は付かない。マジックナンバー (if ($status === 2)) をコードに散らばらせず、if ($status === Order::STATUS_PAID) と書けるようになるのが、読み手に対するいちばん大きな効果になる。

補足として PHP 8.1 以降には enum (列挙型) が導入されていて、「決まった選択肢のうちのどれか」を表現するならクラス定数より enum のほうが型として強く守れる。enum Status { case Active; case Paid; } のように書ける。古いコードベースではクラス定数で十分なケースも多いが、新規設計では「集約された定数群は enum 化を検討する」流れになっていることだけ意識しておく。

学習目標

  • const NAME = 値; でクラスに「変えられない値」を持たせられる
  • ClassName::NAME (外) / self::NAME (中) で参照する
  • static プロパティとの違い (変更可否) を理解する

ドリル

このチャプターはスライドのみ。次の章へ。

採点ドリルは無し。スライドで概念を理解したら ch08 (final) に進む。

解説スライド 全 7 枚

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

  1. クラス定数 (const)

    Lesson 9 / Chapter 7

  2. 「変えてはいけない値」をクラスに持たせたい

    <?php
    class Tax {
        public static float $rate = 0.10;
    }
    
    Tax::$rate = 0.20;   // ❌ うっかり書き換わってしまう
    • static プロパティは便利だが、誰でも書き換えられる
    • 税率や円周率など「変わってはいけない値」には不向き
  3. const で書き換え不能な値を定義

    <?php
    class Tax {
        const RATE = 0.10;
    }
    • const 名前 = 値; の形式
    • 定数名は 大文字 が慣例 (RATE, MAX_AGE など)
    • $ は付けない (変数ではないので)
  4. 参照方法

    <?php
    echo Tax::RATE . "\n";   // 0.1
    // Tax::RATE = 0.20;     // ❌ Fatal error: 定数は変更できない
    • 外からは ClassName::NAME で参照
    • クラス内からは self::NAME で参照
    • 書き換えようとすると即エラー
  5. クラス内での使用例

    <?php
    class Tax {
        const RATE = 0.10;
    
        public static function withTax(int $price): float {
            return $price * (1 + self::RATE);
        }
    }
    
    echo Tax::withTax(1000) . "\n";  // 1100
    • メソッド内では self::RATE で呼ぶ
    • 値が 1 箇所で管理され、改修も楽
  6. static プロパティとの違い

    static $name const NAME
    値の変更 できる できない
    命名 $camelCase UPPER_CASE
    用途 共有される状態 不変の設定値

    「変えていい値 = static、変えてはいけない値 = const」と覚える。

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

    const でクラス定数を定義できる ✅ ClassName::NAME / self::NAME で参照できる ✅ 書き換えるとエラーになることを知っている ✅ static との使い分けを言える

    関連: 同トピック内の他チャプター (このチャプターは採点ドリル無し)

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

Lesson 9 / Chapter 7


「変えてはいけない値」をクラスに持たせたい

<?php
class Tax {
    public static float $rate = 0.10;
}

Tax::$rate = 0.20;   // ❌ うっかり書き換わってしまう
  • static プロパティは便利だが、誰でも書き換えられる
  • 税率や円周率など「変わってはいけない値」には不向き

const で書き換え不能な値を定義

<?php
class Tax {
    const RATE = 0.10;
}
  • const 名前 = 値; の形式
  • 定数名は 大文字 が慣例 (RATE, MAX_AGE など)
  • $ は付けない (変数ではないので)

参照方法

<?php
echo Tax::RATE . "\n";   // 0.1
// Tax::RATE = 0.20;     // ❌ Fatal error: 定数は変更できない
  • 外からは ClassName::NAME で参照
  • クラス内からは self::NAME で参照
  • 書き換えようとすると即エラー

クラス内での使用例

<?php
class Tax {
    const RATE = 0.10;

    public static function withTax(int $price): float {
        return $price * (1 + self::RATE);
    }
}

echo Tax::withTax(1000) . "\n";  // 1100
  • メソッド内では self::RATE で呼ぶ
  • 値が 1 箇所で管理され、改修も楽

static プロパティとの違い

static $name const NAME
値の変更 できる できない
命名 $camelCase UPPER_CASE
用途 共有される状態 不変の設定値

「変えていい値 = static、変えてはいけない値 = const」と覚える。


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

const でクラス定数を定義できる ✅ ClassName::NAME / self::NAME で参照できる ✅ 書き換えるとエラーになることを知っている ✅ static との使い分けを言える

関連: 同トピック内の他チャプター (このチャプターは採点ドリル無し)

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