define
PHP Manual
PHP Manual»その他の関数»define

define

(PHP 4, PHP 5, PHP 7, PHP 8)

define — 名前を指定して定数を定義する

説明

function define(string $constant_name, mixed $value, bool $case_insensitive = false): bool

実行時に、名前を指定して定数を定義します。

パラメータ

constant_name

定数の名前。

注意:

予約語や無効な名前を使っていても、定数を define() できてしまいます。これらの値を取得するには、 constant() 関数を使うこと(だけ)しかできません。 しかしながら、こういったことをするのは推奨されません。

define() は名前を通常の文字列として受け取り、 現在の名前空間を基準に 解決することはありません。 そのため、namespace My\Namespace; の内部で define('MYCONST', 1) と書くと、 エラーも発生せず、黙って MYCONST がグローバル名前空間に定義されます。 定数を名前空間の中に置くには、名前空間を名前の一部に含める必要があり、 先頭に名前空間区切り文字を付けずに define('My\Namespace\MYCONST', 1) や define(__NAMESPACE__ . '\MYCONST', 1) のように書きます。 defined() や constant() と違い、 define() は先頭の区切り文字を取り除きません。 define('\My\Namespace\MYCONST', 1) は true を返しますが、作られた定数を取得する手段はありません。 名前は単なる文字列なので、use 文で導入したエイリアスは適用されません。 ダブルクォートで囲んだ文字列の中では、 "My\\Namespace\\MYCONST" のように 名前空間区切り文字をエスケープする必要があります。

value

定数の値。

警告

リソース型の定数を定義することもできますが、 推奨できません。予期せぬ振る舞いをする可能性があります。

case_insensitive

true を指定すると、定数は大文字小文字を区別しないようになります。 デフォルトでは大文字小文字を区別します。つまり CONSTANT と Constant は別の値を表すわけです。

警告

大文字小文字を区別しない定数を定義するのは、 PHP 7.3.0 以降では推奨されなくなりました。 PHP 8.0.0 以降では、false のみを受け入れます。 true を渡すと、警告が発生します。

注意:

大文字小文字を区別しないときは、定数は小文字で格納されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.1.0 value に、オブジェクトを渡せるようになりました。
8.0.0 case_insensitive に true を渡すと、 E_WARNING が発生するようになりました。 false を渡すことはまだ許可されています。
7.3.0 case_insensitive は非推奨になりました。 8.0.0 で削除される予定です。

例

例1 定数の定義

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // "Hello world." を出力します
echo Constant; // "Constant" を出力し、警告が発生します

define("GREETING", "Hello you.", true);
echo GREETING; // "Hello you." を出力します
echo Greeting; // "Hello you." を出力します

// PHP 7 以降で動作します
define('ANIMALS', array(
    'dog',
    'cat',
    'bird'
));
echo ANIMALS[1]; // "cat" を出力します

?>

例2 予約された名前を定数にする

マジック定数 と同じ名前の定数を定義できる 可能性 を示します。 しかしながら、結果として起きる振る舞いは明らかに混乱を招くため、 こんなことを実際にすることは推奨されません。

<?php
var_dump(defined('__LINE__'));
var_dump(define('__LINE__', 'test'));
var_dump(constant('__LINE__'));
var_dump(__LINE__);
?>

上の例の出力は以下となります。

bool(false)
bool(true)
string(4) "test"
int(5)

参考

  • defined() - 指定した名前の定数が存在するかどうかを調べる
  • constant() - 定数の値を返す
  • 定数の節

To Top