Dans vos vieux scripts, vous pouvez avoir utilisé la syntaxe suivante :
<?php
$foo[bar] = 'ennemi';
echo $foo[bar];
?>
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 :
<?php
echo $arr[ foo(true) ];
?>
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_*.
<?php
$error_descriptions[E_ERROR] = "Une erreur fatale est survenue";
$error_descriptions[E_WARNING] = "PHP a généré une alerte";
$error_descriptions[E_NOTICE] = "Ceci est juste une note grâcieuse";
?>
Notez que E_ERROR est aussi un identifiant
vlaide, tout comme bar dans le premier exemple.
Mais le dernier exemple revient à écrire :
<?php
$error_descriptions[1] = "Une erreur fatale est survenue";
$error_descriptions[2] = "PHP a généré une alerte";
$error_descriptions[8] = "Ceci est juste une note grâcieuse";
?>
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.