Dans de nombreux langages, l'écriture d'une chaîne de caractères se fait généralement d'une seule et même manière. Ce peut être une suite de caractères entre guillemets ou entre apostrophes. Dans le cas de PHP, il existe plusieurs manières d'exprimer une chaîne de caractères, chacune ayant une propriété différente. Malheureusement bien trop de gens ne savent pas faire la différence et les utilisent de manière peu cohérente.
Voici les trois manières d'exprimer une chaîne de caractères en PHP :
- Les chaînes statiques dont le contenu ne varie pas et qui doivent être encadrées par des apostrophes.
- Les chaînes dynamiques dont le contenu est interprété et peut donc varier en fonction des variables qu'elles renferment. Ces chaînes sont encadrées par des guillemets doubles ou respectent la syntaxe "HereDoc".
Je vous laisse consulter la documentation sur la
syntaxe des chaînes de caractères.
Quel est le problème ?
Le problème est que beaucoup de personnes utilisent ces chaînes de caractères de manière peu cohérente. J'entends par là qu'ils alternent les chaînes entre apostrophes et guillemets doubles sans respecter de logique. Une fois c'est l'une, une fois c'est l'autre, ils mélangent et ils "antislashent". Cela démontre une certaine incompréhension des caractéristiques de ces chaînes, et je ne vous parle pas des débutants qui se perdent entre les copier/coller et les variables dans les chaînes statiques.
Et alors ?
Alors, pourquoi ne pas adopter une vrai démarche méthodique et systématique qui consiste à utiliser le bon format de chaînes de caractères en fonction du contexte ? Cette démarche vous permettant de clarifier vos idées par le simple fait de savoir ce que vous faites.
Bien sûr, il n'est pas évident pour ceux qui viennent d'un langage où la définition d'une chaîne de caractères est toujours entre guillemets, mais cela prouvera que vous savez faire la part des choses.
Je suis cohérent, je n'utilise que des guillemets !
Ce n'est pas faux, surtout que l'analyseur syntaxique de PHP considère une chaîne de caractères entre guillemets et sans variable, comme une chaîne statique. Seulement, lorsque vous faites ça, vous imposez à l'analyseur de vérifier qu'il n'y a pas de variable à l'intérieur. Cette perte de temps est certes négligeable, voire nulle dans le cas où vous utilisez un cache d'OpCode, c'est pourquoi je n'insisterai pas sur les performances.
Non, mon argumentaire est vraiment basé sur cette absence de cohérence dans l'écriture du code et qui peut être symptomatique d'un manque de clarté dans vos développements.
Pour finir, les chaînes entre guillemets présentent un inconvénient lors de la génération de code HTML, c'est le manque de lisibilité lorsque que vous écrivez ceci :
<?php
echo "<input type=\"text\" name=\"nom\" value=\"votre nom\" class=\"saisie\" />";
?>
Alors qu'il est tellement plus lisible d'écrire :
<?php
echo '<input type="text" name="nom" value="votre nom" class="saisie" />';
?>
Je rappelle que les attributs HTML doivent de préférence être encadrés par des guillemets, ne serait-ce que par le fait que la fonction htmlspecialchars n'encode pas les apostrophes par défaut (pas d'entité définie).
Revenir aux mises au point