const
キーワードか、
define() 関数を使うことで、定数を宣言することが出来ます。
define() を使えば任意の式を使って定数を定義できますが、
const
キーワードを使う場合には、
次の段落で説明する制約があります。
定数が一度定義されると、
変更または未定義とすることはできません。
const
キーワードで定数に指定できるのは、スカラー式
(bool, int,
double, string) と、
スカラー式だけを含んだ array の定数です。
resource の定数を指定することもできますが、
予期せぬ結果を引き起こすことがあるので避けるべきです。
単に定数の名前を指定することにより、その値を得ることが可能です。
変数とは異なり、その前に $
は不要です。
定数の名前を動的に得る必要がある場合、定数の値を読むために関数
constant() を使用することも可能です。
定義済の定数の一覧を得るには、
get_defined_constants() を使用してください。
注意: 定数と(グローバル)変数は、異なる名前空間にあります。 例えば、
true
と $TRUE は違うものを意味します。
未定義の定数を使用した場合、Error がスローされます。
PHP 8.0.0 より前のバージョンでは、
未定義の定数は、ちょうどstringとして
コールしたかのように(CONSTANT vs "CONSTANT")、
PHPはその定数自体の名前を使用したと解釈していました。
このような振る舞いは、PHP 7.2.0
以降では非推奨となり、E_WARNING
が発生するようになりました。
(それより前のバージョンでは、
E_NOTICE が発生していました)
(bar
が定数でなければ) なぜ
$foo[bar]が間違っている
のかというマニュアルもご覧ください。
これは 完全修飾形式の定数
には適用されず、この場合は未定義なら Error が発生します。
注意: 定数が設定されているかを確認するには、defined() 関数を使って下さい。
変数との違いは次のようになります。
$
)を要しません。
例1 定数の定義
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // "Hello world."を出力
echo Constant; // エラーが発生: Undefined constant "Constant"
// PHP 8.0.0 より前のバージョンでは、"Constant" を出力し、警告が発生
?>
例2 const
キーワードによる定数の定義
<?php
// 単純なスカラー値
const CONSTANT = 'Hello World';
echo CONSTANT;
// スカラー式
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo ANOTHER_CONST;
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // 出力は "cat"
// 配列の定数
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // 出力は "cat"
?>
注意:
define() による定数の定義とは反対に、
const
キーワードで定義した定数はトップレベルのスコープで宣言しなければなりません。 これはコンパイル時に定義されるからです。 つまり、関数、ループ、if
文、またはtry
/catch
ブロックの内部では宣言できないということです。
注意:
PHP 8.0.0 より前のバージョンでは、define() 関数を使って定義された定数は、 大文字小文字を区別しません。