2013-07-29 8 views
9

Ich kann nicht verstehen, warum dieser Code ausgeführt wird, ist nicht die Art, die ich möchte. PHP definiert() warum gibt es false zurück, auch wenn die Konstante definiert ist?

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

Druck:

123 
bool(false) 
+4

@downvoters falsch nennen, Geist zu erklären? Das ist eine gute Frage, es ist klar, was gefragt wird, er hat selbst etwas versucht und seinen Code geteilt. Er gibt auch seine Erwartungen und das Ergebnis an. – Kevin

Antwort

19

Weil Sie nicht auf die ständige Bezugnahme genannt TEST - Sie beziehen sich auf alles, was TEST enthält.

Wrapped aus, das ist, was Sie tun (der Code ist richtig - es gibt keine 123 konstant):

var_dump(defined(123)); 

auf den konstanten Namen Siehe statt (setzen Sie ihn in Anführungszeichen):

var_dump(defined('TEST')); 
2

Wahrscheinlich, da define() eine Zeichenfolge als Parameter benötigt.

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

Nicht ganz richtig. Wenn Sie 'defined (TEST)' versuchen und die Konstante * nicht * definiert ist, erhalten Sie eine 'E_NOTICE', aber sie wird in die Zeichenfolge' TEST' umgewandelt, wenn sie also * nicht definiert ist, Es ist dasselbe wie "Definiert ('TEST')" zu sagen. – h2ooooooo

+0

@ h2ooooooo [Nach den PHP-Dokumenten] (http://php.net/manual/en/function.defined.php) "bool definiert (string $ name)" und "Gibt TRUE zurück, wenn die benannte Konstante namens name hat wurde definiert, sonst FALSCH. " – Kevin

3

Verwendung haben es

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')); 
Verwandte Themen