2013-07-29 17 views
9

Non riesco a capire perché questo codice viene eseguito non è il modo che voglio. PHP defined() perché restituisce false, anche se la costante è definita?

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

stampa:

123 
bool(false) 
+4

@downvoters, mente spiegare? Questa è una buona domanda, è chiaro cosa viene chiesto, ha provato qualcosa da solo e ha condiviso il suo codice. Dichiara anche le sue aspettative e quale sia in realtà il risultato. – Kevin

risposta

19

perché non stai facendo riferimento alla costante denominata TEST - ti riferisci a qualunque TEST contiene.

Avvolto fuori, questo è quello che stai facendo (il codice è giusto - non c'è 123 costante):

var_dump(defined(123)); 

fare riferimento al nome costante invece (racchiuderlo tra virgolette):

var_dump(defined('TEST')); 
2

Probabilmente perché defined() richiede una stringa come parametro.

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

Non completamente vero. Se provi 'defined (TEST)' e la costante * non è * definita, otterrai un 'E_NOTICE', ma lo convertirà nella stringa' TEST', quindi se * non * è definito, è come pronunciare 'defined ('TEST')'. – h2ooooooo

+0

@ h2ooooooo [Secondo i documenti php] (http://php.net/manual/en/function.defined.php) "bool definito (stringa $ nome)" e "Restituisce VERO se la costante nominata data per nome ha stato definito, altrimenti FALSO. " – Kevin

3

uso hanno lo chiamano sbagliato

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')); 
Problemi correlati