(PHP 4, PHP 5, PHP 7, PHP 8)
defined — 指定した名前の定数が存在するかどうかを調べる
constant_name で指定した定数が定義されているかどうかを調べます。
この関数は クラス定数 や 列挙型の case に対しても動作します。
注意:
変数が存在するかどうかを知りたければ、isset() を利用してください。defined() は 定数にしか適用できません。 関数が存在するかどうかを知りたければ、 function_exists() を利用してください。
constant_name定数名。
注意:
defined() は名前を通常の文字列として受け取り、 現在の名前空間を基準に 解決することはありません。 名前はグローバル名前空間から探されます。 そのため非修飾名を渡すと、同じ名前を識別子としてそのまま書いた場合に 参照される定数ではなく、グローバル名前空間にある同名の定数が 黙って調べられることがあります。 名前空間の中で宣言された定数が定義されているかどうかを調べるには、
defined('My\Namespace\MYCONST')やdefined(__NAMESPACE__ . '\MYCONST')のように、名前空間を名前の一部に含める必要があります。 名前は単なる文字列なので、use文で導入したエイリアスやnamespace\プレフィックスは適用されません。 ダブルクォートで囲んだ文字列の中では、"My\\Namespace\\MYCONST"のように名前空間区切り文字をエスケープする必要があります。 名前のうち名前空間の部分は大文字小文字を区別しませんが、定数名は区別します。
例1 定数のチェック
<?php
/* 引用符の使い方に注意してください。これは重要です。この例では
* 文字列 'TEST' が、定数 TEST の名前かどうかを調べています。*/
if (defined('TEST')) {
echo TEST;
}
interface bar {
const test = 'foobar!';
}
class foo {
const test = 'foobar!';
}
var_dump(defined('bar::test')); // bool(true)
var_dump(defined('foo::test')); // bool(true)
?>例2 列挙型のcase をチェックする(PHP 8.1.0 以降)
<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}
var_dump(defined('Suit::Hearts')); // bool(true)
?>