Pourquoi est ce que
$foo[bar]
est invalide?
Dans
vos
vieux
scripts
,
vous
pouvez
avoir
utilisé
la
syntaxe
suivante
:
Cela est mauvais, mais ca marche. Pourquoi est-ce mauvais? La
raison est que PHP réclame une expression entre les crochets
(comme indiqué dans la section sur la
syntaxe
des tableaux). Cela signifie que vous pouvez écrire quelque
chose comme :
Ceci est un exemple d'utilisation de retour de fonction dans
un index de tableau. PHP reconnait aussi les constantes, et
vous pouvez avoir déjà rencontré
E_*
.
Notez que
E_ERROR
est aussi un identifiant vlaide, tout comme
bar
dans le premier exemple. Mais le dernier exemple revient à
écrire :
car
E_ERROR
égale
1
, etc.
Alors
,
comment
se
fait-tile
que
$foo[
bar
]
fonctionne
?
C
'
est
parce
que
bar
est
attendu
comme
une
constante
.
Cependant
,
dans
ce
cas
,
aucune
constante
n
'
a
pour
nom
bar
.
PHP
suppose
alors
que
vous
voulez
dire
bar
littéralement
,
c'
est-à-dire
la
chaîne
"bar
"
,
mais
que
vous
avez
oublié
les
guillements
.
Alors, pourquoi est-ce mal?
Dans
le
futur
,
l
'
équipe
de
développement
peut
vouloir
ajouter
une
nouvelle
constante
et
vous
vous
retrouverez
dans
la
panade
.
Par
exemple
,
vous
ne
pouvez
déjà
pas
utiliser
les
constantes
empty
et
default
,
car
ce
sont
des
mots
reservés
.
Et
,
pour
en
mettre
une
autre
couche
,
cette
syntaxe
est
tout
simplement
obsolète
,
et
risque
de
ne
plus
fonctionner
du
tout
un
jour
ou
l
'
autre
.
Lorsque
vous
activez
le
rapport
d'
erreur
avec
error_reporting(
)
avec
E_ALL
,
PHP
générera
des
notes
à
chaque
fois
que
cette
syntaxe
est
utilisée
.
Essayez
donc
error_reporting(
E_ALL)
;
dans
vos
scripts
,
pour
voir
)
.