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

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

クラスには『クラス定数』と呼ぶ定数があります。

クラス定数はクラスレベルの定数で、通常の定数と同様に一定の値を保ちます。

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

検証環境

クラス定数

クラス定数は“クラスレベルの定数”です。

define関数を使って定義した定数と同様に、クラス定数も値の変更ができないため、常に一定の値を保証します。

また、クラス定数はクラスに紐づくため、オブジェクトを生成しなくてもアクセスが可能です。

クラス定数の定義

クラス定数を使うには定義が必要です。

基本構文

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

クラス定数はアクセス修飾子とクラス定数名の間にconstキーワードを記述します。

値は定義時に代入演算子で記憶した値から変更できません。

また、クラス定数名は慣例的に大文字のみで命名され、変数ではないため、ドルマーク($)は付けません。

サンプル

<?php

// 人間クラス
class Person {

    ___ih_hl_start
    public const GREETING = 'Hello.';
    ___ih_hl_end
    
}

?>
$ php sample.php
$

6行目がクラス定数の定義です。

PersonクラスにGREETINGというクラス定数を定義し、値を'Hello.'としています。

値の取得

クラスを経由してクラス定数の値を取得します。

基本構文

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

クラス名とクラス定数をダブルコロン(::)で繋げて記述します。

サンプル

<?php

// 人間クラス
class Person {
    
    public const GREETING = 'Hello.';
    
}

___ih_hl_start
echo Person::GREETING;
___ih_hl_end

?>
$ php sample.php
Hello.

10行目のPerson::GREETINGでクラス定数の値を取得しています。

実行結果から正常に値を取得できていることが分かります。

演習問題

問題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平方メートル