構文

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() 関数を使って定義された定数は、 大文字小文字を区別しません。

add a note add a note

User Contributed Notes 4 notes

up
9
login at (two)view dot de
6 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
up
-3
halfhearted13 at gmail dot com
3 years ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
up
-8
privat at ulrich-kapp dot de
4 years ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
up
-12
mh at hanft dot de
4 years ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));

won't work with PHP 5.6, but

const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

will.
To Top