ITHACK
~ みんなのIT部門 ~

【PHP】クラス定数(const) – クラスレベルの定数

クラスにはクラス定数と呼ばれる仕組みがあります。
クラス定数はクラスレベルの定数で、通常の定数と同様に値を変更できません。

ここではクラス定数について解説します。

なお、クラスについては次の記事をご覧ください。

  • クラス定数

クラス定数とは

クラス定数はクラスレベルの定数です。
通常の定数と同様に、プログラムの処理中に値を変更することはできないた、実行時は一定の値を保ちます。

基本構文

クラス定数の基本構文は次のようになります。

定義

class クラス名 {
    アクセス修飾子 const クラス定数名 = 値;
}

クラス定数は先頭にconstキーワードを付けます。
また、定数は変数でないためドルマーク($)は付けません。

値の取得

クラス名::クラス定数名

クラス定数の値を取得するには、クラス名とクラス定数をダブルコロン(::)で繋げて記述します。

サンプルコード

クラス定数を使ったサンプルコードをご覧ください。

<?php

// クラス
class Bill {
    
    // 税率
    public const TAX = 0.1;
    
    // 料金
    public $price;
    
    // コンストラクタ
    public function __construct( $price ) {
        $this->price = $price;
    }
    
    // 合計金額を出力する
    public function total() {
        // 合計金額
        $total = $this->price + $this->price * Bill::TAX;
        // 合計金額を出力
        echo "小計  : ".$this->price."\n";
        echo "税率  : ".self::TAX."\n";
        echo "合計  : ".$total."\n";
    }
    
}

// インスタンス化(インスタンスの生成)
$item = new Bill(1500);

// 合計金額を出力
$item->total();

?>
小計  : 1500
税率  : 0.1
合計  : 1650

Billクラスは会計クラスです。
7行目のconst TAX = 0.1がクラス定数の定義になり、20行目のBill::TAXが値の取得になります。

クラス定数はプログラム中で値を変更することができません。
そのため、クラス定数の値は定義と同じ箇所で代入演算子を用いて記憶する必要があります。

また、クラス定数名は慣例的に大文字のみで命名されることが多くあります。

演習問題

問題1

次の実行結果になる車クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 車クラスを作成する
  • 車クラスのフィールドはナンバー、色、乗車人数とする
  • 車クラスのインスタンスの初期値はコンストラクタで設定する
  • 車情報を出力するinfoメソッドを作成する
  • タイヤ数はクラス定数とする
===== 車情報 =====
ナンバー : 1234
色    : 紺色
乗車人数 : 5人
タイヤ数 : 4個
===== 車情報 =====
ナンバー : 0987
色    : 赤
乗車人数 : 2人
タイヤ数 : 4個

問題2

次の実行結果になる家クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 家クラスを作成する
  • 家クラスのフィールドは面積(単位:畳)とする
  • 家クラスのインスタンスを3つ生成し、各面積(畳)は次の通りとする
    1つ目 : 6
    2つ目 : 14
    3つ目 : 30
  • 家クラスのインスタンスの初期値はコンストラクタで設定する
  • 畳の高さ(1.82m)と横幅(0.91m)を記憶するクラス定数を定義する
  • クラス定数を使って家の面積(平方メートル)を出力するareaメソッドを作成する
面積 : 9.9372平方メートル
面積 : 23.1868平方メートル
面積 : 49.686平方メートル

まとめ

クラス定数はクラスレベルの定数です。
プログラム内で値を変更できないため、一定の値を保つことを保証します。
固定値かつ意図的に変更したくない値は定数化すると良いでしょう。