定数
- 解説
- 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行目のコメントを外してみてください。