PHP 5.3 : Syntaxe nowdoc pour les chaînes de caractères

29 octobre 2008php, php-5.3
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

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)

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 :

heredoc.png

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 :

nowdoc-single-quotes.png

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 :

nowdoc-double-quotes.png

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 ^^