PHP 5.3 : Syntaxe nowdoc pour les chaînes de caractères
29 octobre 2008 —Les exemples correspondant à ce point se trouvent dans le répertoire "nowdoc".
PHP 4 avait introduit la syntaxe Heredoc, utilisée pour pouvoir écrire les chaînes de caractères longues sur plusieurs lignes.
PHP 5.3 va maintenant introduire la syntaxe Nowdoc !
Sommaire :
- Syntaxe heredoc (PHP >= 4.x)
- Syntaxe nowdoc ; guillemets simples
- Syntaxe nowdoc ; guillemets doubles
Syntaxe heredoc (PHP >= 4.x)
Pour commencer, un petit rappel sur la syntaxe Heredoc, souvent peu connue des développeurs.
Le principe de la syntaxe Heredoc est le suivant :
- Un marqueur de début de chaîne, précédé par
<<<
- Une chaîne de caractères pouvant être écrite sur plusieurs lignes
- Avec interpolation des variables (comme les chaînes de caractères placées entre double-quotes).
- Ce qui permet d'obtenir des portions de sources lisibles, même en cas de chaînes de caractères longues !
- Un marqueur de fin de chaîne : le même que celui de début de chaîne, suivi d'un point-virgule -- et rien d'autre sur la ligne !
Par exemple :
$syntaxe = 'Heredoc';
$str = <<<END_OF_STRING
<h1>Hello, world!</h1>
<div>
Démonstration syntaxe
<strong>$syntaxe</strong>
</div>
END_OF_STRING;
echo $str;
Et, lors de l'exécution de cette portion de code, nous obtiendrons l'affichage suivant :
En somme, notre variable a été interpolée (on voit sa valeur, et non son nom), et les indentations ont été conservées, si vous regardez le source de la page HTML rendue.
Syntaxe nowdoc ; guillemets simples
A présent, passons à la syntaxe nowdow, utilisant des simples quotes : deux différences avec la syntaxe heredoc :
- Le nom du marqueur est entouré de simple quotes,
- Et les variables ne sont pas interpolées -- comme dans une chaîne de caractère délimitée par des simples quotes.
Par exemple :
$syntaxe = 'Nowdoc (single-quotes)';
$str = <<<'END_OF_STRING'
<h1>Hello, world!</h1>
<div>
Démonstration syntaxe
<strong>$syntaxe</strong>
</div>
END_OF_STRING;
echo $str;
L'exécution de cette portion de code nous permettra d'obtenir l'affichage suivant :
En somme, cette fois-ci, la variable $syntaxe
utilisée au sein de la chaîne déclarée à l'aide de la syntaxe Nowdow single-quotes n'a pas été interpolée : on voit son nom, et non sa valeur.
Syntaxe nowdoc ; guillemets doubles
Et, par consistance, on peut aussi utiliser la syntaxe Nowdoc avec des doubles-quotes, de la manière suivante :
$syntaxe = 'Nowdoc (double-quotes)';
$str = <<<"END_OF_STRING"
<h1>Hello, world!</h1>
<div>
Démonstration syntaxe
<strong>$syntaxe</strong>
</div>
END_OF_STRING;
echo $str;
Avec cette écriture, nous obtiendrons exactement le même résultat qu'avec la syntaxe heredoc (sans single-quotes, ni double-quotes, donc), à savoir, nos variables seront interpolées, comme avec n'importe quelle chaîne de caractères déclarées entre guillemets doubles.
Ici, donc, nous aurons l'affichage suivant :
En somme, exactement le même comportement que nous obtenions depuis PHP 4.x avec la syntaxe heredoc... Mais au moins, les choses sont cohérentes... Au sein de la syntaxe nowdoc [1] !
Nous utilisons des simples quotes pour ne pas avoir d'interpolation, quelque soit la syntaxe utilisée, et des doubles quotes pour avoir de l'interpolation de variables ; nowdoc ou pas !
Note
[1] Je ne parle pas de cohérence au sein de PHP en lui-même ; je ne rentrerai pas dans le débat ^^