定数

目次
  • 解説
  • 1. 学習の準備
  • 2. 定数とは
  • 3. 定数の命名規則
  • 4. 定数を作る場所
進捗を変更する




解説

1. 学習の準備


型と変数について学ぶ前に > 1. 学習の準備」を参考に、下表のとおり学習用のクラスを作成して、その中にmainメソッドを作っておきましょう。

ファイル名Constants.php
クラス名Constants

2. 定数とは


変数はその名のとおり、再代入することによってデータの変更が可能です。仮にプログラム中で変更したくないデータを入れた場合にも、誤って再代入されてしまう恐れがあります。

そのために、定数(ていすう)という変更不可能な器を作る方法が用意されています。定数は、先頭に「const」というキーワードを付け、「$」はつけずに、通常大文字で定義します。

定数は、変数とは違い最初の代入以降が再代入不可となります。

定数のメリットは変数のメリットとほぼ同じです。

メリット主な効果
データに名前を付けられる・データの中身を知らなくても使える
データを表現する際の記号(ダブルクォーテーションなど)を多用しなくて済む・プログラムコードが煩雑にならない
異なる型のデータを同じように扱うことができるようになる・データの受け渡しが容易になる
再代入時にエラーが発生する・代入ミスを防げる

3. 定数の命名規則


定数の名前はコンスタントケースという命名規則に従って命名します。

規則名・例規則・由来・別名・用途
キャメルケース
aaaBbbCcc
・先頭小文字、単語の先頭大文字
・大文字の位置がらくだのコブに見えることに由来
・ロワーキャメルケースとも呼ぶ
・PHPでは変数名やメソッド名などに使用する
パスカルケース
AaaBbbCcc
・先頭大文字、単語の先頭大文字
・Pascalという言語で使われていたことに由来
・アッパーキャメルケースとも呼ぶ
・PHPではクラス名などに使用する
スネークケース
aaa_bbb_ccc
・すべて小文字、アンダーバーで単語を接続
・ヘビに見えることに由来
・主に大文字小文字を区別しない環境
 (HTMLやSQLなど)で使用する
ケバブケース
aaa-bbb-ccc
・すべて小文字、ハイフンで単語を接続
・トルコの串焼き料理ケバブに見えることに由来
・ハイフンがマイナスを示さない環境
 (HTMLや設定ファイルなど)で使用する
コンスタントケース
AAA_BBB_CCC
・すべて大文字、アンダーバーで単語を接続
・定数(constant)で使われることに由来
・アッパースネークケースとも呼ぶ
・PHPでは定数名に使用する

命名規則は絶対ではなく、あくまで一般的にみんなが推奨するというものです。そのため、所属する会社やプロジェクトやチームなどにより若干の変動がありますので、それぞれの方針に従うようにしましょう。

なお、どんな名前を付けても構いませんが、命名に使う文字や単語には制約があります。

使用可能文字・A-Z、a-z、アンダーバー(_)、0-9のみが使用できる
・ただし先頭に0-9は使用できない
予約語の単体使用不可・型名(int、bool他)、修飾子(public、static他)、
 その他キーワード(class、include他)は予約語と言い、
 変数名などの名前(識別子)に単体では使用できない

4. 定数を作る場所


PHPでは他にも、「define()」という関数を使用して定数を定義することができます。

1. 学習の準備」で作成した「Constants.php」ファイル全体を次のサンプルコードのように変更し、ブラウザから「http://localhost/php_basic/Constants.php」を確認しましょう。

<?php 
include './utility/Logger.php';

// プログラムの実行箇所(エントリーポイント)
Constants::main();

// プログラムの定義
class Constants {
    // define('CLASS_CONSTANT', 'これはクラス定数です。'); // defineはクラス定数を定義することはできない。
    private const CC = 'これはクラス定数です。'; // クラス内でのみ使用可能

    static function main() {
        define('MAIN_METHOD_CONSTANT', 'これはメインメソッドの定数です。');
        // self::CC = '再代入できない';
        // define('MAIN_METHOD_CONSTANT', '再代入できない');
        // const MMC = 'これはメインメソッドの定数です。';
        self::practiceScope();
    }

    static function practiceScope() {
        Logger::echo(MAIN_METHOD_CONSTANT);
        Logger::echo(self::CC); // クラス定数を、selfで呼び出す
        Logger::echo(Constants::CC); // クラス定数を、クラス名で呼び出す
    }
}

constを使用した場合、関数やif文内で定義するとエラーになり、define()を使用した場合は、クラス直下で定義(クラス定数)するとエラーになるなどの違いがあります。それぞれエラーになることを確認するために、9行目、16行目のコメントを外してみてください。

また、定数が再代入できないことを確認するためには、14行目、15行目のコメントを外してみてください。