Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox



Syntaxe Array : une erreur récurrente à éviter

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par zebden (Anthony Lombard), le 23 décembre 2007

Donc voici ce qu'il faut absolument éviter quand vous utilisez un tableau :

<?php
echo $tableau[cleDeTableau];
?>

Alors avez-vous remarqué l'erreur ? L'index (ou la clé si vous préférez) du tableau n'a pas été délimité par des quotes (single ou double).

Réponse du programmeur lambda : oui, mais ça marche tout de même !!!

Faux, oui ça marche mais voici l'enchainement quand vous écrivez ainsi :

Vous renseignez comme clé de tableau une constante non définie et non une chaine ! Donc étant indéfinie, la constante est égale à sa propre valeur. Cela provoque pour le coup, un ralentissement du script puisqu'il va d'abord aller voir si la constante cleDeTableau existe, cela peut aussi provoquer un Warning, si la gestion des erreurs est à son maximum, vous prévénant que la constante n'a pas été définie et enfin une mise en situation :

<?php
// init de la var (ici on délimite)
$tableau['var'] = "Valeur"
 
// Enchaînement
echo $tableau[var]; // affiche valeur
echo $tableau['var']; // affiche valeur
 
// On définie la constante pour montrer la différence
define('var', 'autreCle');
 
echo $tableau[var]; 
/*
Va renvoyer : Undefined index puisque l'index n'est pas var mais autreCle
on essaie donc d'afficher $tableau['autreCle'] qui n'existe pas
*/
?>

Pour résumer en francais :

$tableau['var'] : vous assignez la chaine “var” pour définir la clé de $tableau.
$tableau[var] : vous assignez la constante var comme clé de $tableau.
$tableau[$var] : vous assignez la variable $var comme clé de $tableau.

Donc, si vous n'utilisez pas de constantes proprement dites pour renseigner une valeur à un tableau, fonction ou méthode, délimitez vos chaines pour qu'elles soient prisent comme tel.

* Article original sur http://zebden.fr/index.php?2006/07/19/41-synthaxe-array-une-erreur-recurrente-a-eviter