Modérateur PHPfrance |
10684 Messages
21 déc. 2007, 13:31
En fait ça fonctionne parce que php ne trouvant pas de constante définie, va par défaut interpréter la valeur de celle-ci comme un string. (si tu actives les messages de type "Notice" dans la gestion d'erreur du php.ini tu auras un avertissement

)
En gros, quand tu fais "define(DATABASE, 'xxxx');" il va chercher s'il trouve constante nommé DATABASE (au cas où elle contiendrait déjà une valeur), et si/puisque il n'en trouve pas, il va considérer qu'il doit probablement s'agir d'une chaine de caractère "DATABASE" qu'il va pouvoir utiliser.
C'est la même chose quand tu récupères des données via $_POST, $_GET etc. Tu peux utiliser $_POST[toto], php va alors chercher la constante toto, ne pas la trouver, utiliser la valeur de la chaine à la place et te retourner la valeur de $_POST['toto'].
Autant lui épargner un travail inutile et lui dire dès le départ que c'est bien une chaine

D'autant que le comportement peut être différent :
define(DATABASE, 'xxxx'); // ne trouve pas la constante, définie une constante DATABASE avec la valeur 'xxxx'
define(DATABASE, 'xxxx'); // trouve la constante, utilise sa valeur et définie une constante xxxx avec la valeur 'xxxx'
// alors que
define('DATABASE', 'xxxx'); // défini une constante DATABASE avec la valeur 'xxxx'
define('DATABASE', 'xxxx'); // retourne une erreur car la constante est déjà définie.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...