2013-07-29 6 views
9

このコードがなぜ実行されるのか理解できません。 PHP defined()なぜ定数が定義されていてもfalseを返すのですか?

define('TEST', 123); 
echo TEST; 
echo "\n"; 
var_dump(defined(TEST)); 

印刷:

123 
bool(false) 
+4

@downvoters、心を説明し、それを呼び出す必要がありますか?これは良い質問です。何が尋ねられているかはっきりしています。彼は何か自分自身で試してみて、自分のコードを共有しています。彼はまた、彼の期待と実際の結果を述べている。 – Kevin

答えて

19

あなたはTEST名前付き定数に言及していないので - あなたが含まれているものは何でもTESTに言及しています。

var_dump(defined(123)); 

は、(引用符で囲む)の代わりに定数名を参照してください:

- これはあなたが(ない 123定数が存在しないコードは右である)やっていることで、アウトラップ

var_dump(defined('TEST')); 
2

おそらく、defined()がパラメータとして文字列を必要とするためです。

var_dump(defined('TEST')); 
+0

完全に真実ではありません。 'defined(TEST)'を試して*定数*が定義されていないと 'E_NOTICE'が返されますが、' TEST'という文字列に変換されるので、*定義されていない*これは 'defined( 'TEST')と同じです。 – h2ooooooo

+0

@ h2ooooooo [php docsによる](http://php.net/manual/en/function.defined.php) "bool defined(string $ name)"および "nameで指定された名前付き定数がそれ以外の場合はFALSEを返します。 – Kevin

3

使用が間違っ

define('TEST', 123); 
echo TEST; 
echo "\n"; 
var_dump(defined(TEST));//provide The constant name you are providing 123 so it not defined 
//correct call would be 
var_dump(defined('TEST'));