定数は変数とセットで説明されることが多いのですが、変数についてはかなり詳しく説明されていても、定数については簡単な説明しかされないこともしばしば。
そのため、定数をどう使えばよいかがわからないという方も多いのではないでしょうか。
ここでは、PHPで定数を扱うための方法を説明するのとあわせて、メリットなども説明します。PHPプログラミングに興味のある方は、プログラミング学習の参考として、ぜひ読んでみてください。
目次
定数とは
定数と変数の違い
定数は、数値や文字列などの値に名前あるいは識別子をつけたものです。
定数は、いったん定義されると、その値を変更することができません。
いつでも値の変更が可能な変数とはこの点が大きく異なります。
定数の命名規則
定数名では、文字、数字、アンダースコアが使えます。ただし、先頭の文字は、文字またはアンダースコアに限られます。
定数名では、大文字と小文字は区別されます。なお、慣習的に、定数名はすべて大文字とします。
小文字屋アンダースコアを使ってもエラーとはなりませんが、プログラムをわかりやすくまたメンテナンスが楽になるように、すべて大文字の定数名を使うことをおすすめします。
定数の定義
定数を定義するには、大きくは2つの方法があります。
- constキーワードを使う。
- define関数を使う。
consキーワードで定数を定義する
定数は、PHP構文のconst キーワードを使って定義できます。
1 |
const 定数名 = 値; |
- 定数名:大文字で構成される名前です。
- 値:定数として指定できるのは、スカラー式 (int、 float、string、bool あるいは nul) 、 スカラー式だけを含んだ array の定数です。
define関数で定数を定義する。
定数は、define関数を使っても定義できます。
define関数を使えば、スカラー式のみならず、任意の式を使って定数を定義できます。
また、定数名を命名規則の制限によらず、自由に設定できるため、例えば、関数名やPHPの予約語なども名前とすることも可能です。
ただし、こうした使い方はプログラムのミスにつながるので控えましょう。
定数を使うメリット
値を固定
変数では実行中に値を更新することが可能であり、意図せず更新してしまうというミスを防ぐことができません。
定数であれば、いったん定義した値を意図せず変更した場合はエラーとなるのでミスを防げます。
一元管理
定数の値を直接ソースコードに書き込んでしまうことも可能です。
この方法では、値の変更が必要な場合には、手間もかかりますし、修正漏れなどもミスを招くリスクも増えてしまいます。
定数として定義しておけば、一カ所を修正するだけなので確実に修正でき、ミスも防げます。
定数のconstによる定義についてはこちらも参考にしてください。
【初心者向け】phpの「const」で定数を定義する方法constキーワードとdefine関数の違い
constキーワードを使う場合とdefine関数を使う場合の違いをまとめました。
constキーワード使用 | define関数使用 | |
---|---|---|
有効範囲 | namespaceの範囲内 | グローバルに使用できる |
記述できる場所 | プログラムのトップのみ | if文、for文、function内で定義可能 |
クラス定義での使用 | クラス定数を定義できる | クラス定数の定義にはつかえない |
変数の参照 | 値の設定で参照不可 | 値の設定で参照可能 |
関数戻り値の参照 | 値の設定で参照不可 | 値の設定で参照可能 |
こちらも参考に。
未経験・初心者向け「PHP鬼練1〜5」- 変数・if文・switch文 –定数に関する関数
define
実行時に、名前を指定して定数を定義します。
1 |
define ( string $name , mixed $value , bool $case_insensitive ) |
パラメータ
パラメタ | 説明 |
---|---|
name | 定数の名前 |
value | 定数の値。PHP 5 では、スカラー値 (int、 float、string、bool あるいは null) のみで、PHP 7 では配列を使うことも可能です。 |
case_insensitive | ・定数名での大文字小文字を区別要否を指定 デフォルトおよびfalse指定:区別する true指定:区別しない ・PHP8.0ではこの引数は使えなくなりました! ・定数名では、大文字小文字は区別されます! |
返り値
成功した場合に true を、失敗した場合に false を返します。
使用例
1 2 3 4 5 6 |
<?php //defineno 第3引数はphp8.0から廃止! define("GREETING", "Hello you.", true); echo 'GREETING:'.GREETING."<br />".PHP_EOL; // "Hello you." を出力します echo 'Greeting:'.Greeting."<br />".PHP_EOL; // エラー ?> |
結果
1 2 3 4 |
Warning: define(): Argument #3 ($case_insensitive) is ignored since declaration of case-insensitive constants is no longer supported in ○○.php on line × GREETING:Hello you. Fatal error: Uncaught Error: Undefined constant "Greeting" in ○○.php:5 Stack trace: #0 {main} thrown in○○.php on line × |
defined
指定した定数が存在し、定義されているかどうかを調べます。
1 |
defined ( string $name ) |
パラメータ
パラメタ | 説明 |
---|---|
name | 定数の名前 |
返り値
name で指定した名前の定数が定義されている 場合に true、その他の場合にfalseを返します。
使用例
1 2 3 4 5 6 7 8 |
<?php //文字列 'TEST' が、定数 TEST の名前かどうかを調べる。 if (defined('TEST')) { echo TEST; }else{ echo "TEST is undefined"; } ?> |
結果
1 |
TEST is undefined |
constant
name で指定した定数の値を返します。
定数名が変数に保存されていたり、 関数の戻り値として返される場合などに使うと便利です。
この関数は クラス定数に対しても動作します。
1 |
constant ( string $name ) |
パラメータ
パラメタ | 説明 |
---|---|
name | 定数の名前 |
返り値
定数の値、あるいはその定数が定義されていない場合に null を返します。
定数が定義されていない場合は E_WARNING レベルのエラーが発生します。
使用例
1 2 3 4 5 6 7 8 9 10 |
<?php define("MAXSIZE", 100); echo 'MAXSIZE:'.MAXSIZE."<br />".PHP_EOL; echo 'constant("MAXSIZE"):'.constant("MAXSIZE")."<br />".PHP_EOL; // ひとつ前の行と同じことです class foo { const test = 'foobar!'; } $const = 'test'; var_dump(constant('foo::'. $const)); // string(7) "foobar!" ?> |
結果
1 2 3 |
MAXSIZE:100 constant("MAXSIZE"):100 string(7) "foobar!" |
get_defined_constants
現在定義されている全ての定数の名前と値を返します。
返される値には、 拡張モジュールで作成された定数や define 関数で作成された定数も含まれます。
1 |
get_defined_constants ( bool $categorize) |
パラメータ
パラメタ | 説明 |
---|---|
categorize | デフォルトはfalseで、定数とその値の配列が返されます。trueを指定すると、カテゴリごとの配列が返されます。 |
返り値
定数名 => 定数値 の配列の配列を返します。
オプションで、その定数を定義している拡張モジュール名ごとにグループ化することもできます。
使用例
1 2 3 4 |
<?php define("MY_CONSTANT", 1); print_r(get_defined_constants(true)); ?> |
基本的なプログラミング用語はこちらも参考してください。
【初心者向け】JavaScriptのvar・const・letとは?基本的な違いを分かりやすく解説します。まとめ
いかがでしたか? 今回は、PHPで定数を定義する方法や使うにあたっての留意点なども紹介しました。
PHPにかぎらず、他のプログラミング言語の場合も同様なのですが、定数をうまく使うことでプログラムのメンテナンス性を向上させることができます。
この記事が、PHPプログラミングの学習の参考としてお役に立てば幸いです。