定数は、値のためのID(名前)です。この名前が示すように、定数の値は スクリプト実行中に変更できません (マジック定数 は例外です。これは実際は定数ではありません)。 定数は大文字小文字を区別します。慣習的に、 定数は常に大文字で表記されます。
注意:
PHP 8.0.0 より前のバージョンでは、 define() 関数を使って定義された定数は、 大文字小文字を区別しない場合がありました。
定数の名前は、PHP のラベルと同じ規則に従います。有効な定数の名前は、
文字またはアンダースコアで始まり、任意の数の文字、数字、
アンダースコアが後に続きます。正規表現で示すと次のようになります。
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
define() 関数を使うと、 予約語や有効でない名前の定数を定義することが可能です。 この場合の定数の値は constant() 関数によってのみ取得できますが、 このような使い方は推奨できません。
ユーザーレベルでの命名の手引き も参照ください。
例1 有効/無効な定数名の例
<?php
// 有効な定数名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 無効な定数名
define("2FOO", "something");
// 有効だが、避けるべき。
// 将来 PHP に定数の予約語が追加された場合に
// スクリプトが動作しなくなる可能性がある
define("__FOO__", "something");
?>
注意: 本節の目的においては、文字は a-z, A-Z, および128から255まで (0x80-0xff)のASCII文字を指します。
スーパーグローバルと同様に定数のスコープはグローバルです。 つまり、スコープによらずスクリプトの中ではどこでも定数に アクセスできます。スコープの詳細についてはマニュアルの 変数のスコープ をご覧ください。
注意: PHP 7.1.0 以降では、クラス定数は protected または private として宣言でき、 それが定義されたクラス階層のスコープでのみ利用可能にすることができます。