PHP:defineで定数の2重定義はエラーになる

phpdefineを使用し、定数定義した時に同じ名前の定数を2重で定義するとエラーになります。

例えば下記のように、処理の中で同じ名前の定数を複数定義します。

define('TEST', 'テスト');

define('TEST', 'test');

echo TEST;

出力結果は1度目に定義した値が出力されます。

テスト

一度定義した定数は再定義することができないのです。

2重定義をすると、下記のようなエラーが返ってきます。

Constant TEST already defined

フレームワークなどを使用している場合、複数のファイルを読み込むことが多いので注意が必要です。
また、requireincludeでファイルをインクルードしている場合も注意した方がいいと思います。

色々な箇所で定数を定義していると、2重定義をする可能性があるかもしれないので
定数を定義するファイルはなるべく一つにまとめた方がいいのかなと思います。

defined()関数を使用すれば、すでに定数が存在するかわかるので、
下記の方法で2重定義を防ぐことが可能です。


2重定義を防ぐ方法

defined()はすでに定数が存在するか調べることができる関数です。
指定した値が定数で定義させている場合は「true」、定義されていない場合は「false」を返します。

なので、定義されていない場合に定数をセットするようにすればOKです。

if (!defined('TEST')) {
	define('TEST', 'テスト');
}