2013-07-29 3 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 содержит.

обернутый вне, это то, что вы делаете (код прав - нет 123 постоянная):

var_dump(defined(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)» и «Возвращает TRUE, если именованная константа, заданная по имени, были определены, ЛОЖЬ в противном случае. " – 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')); 
Смежные вопросы