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

Vous avez apprécié cet article ? Faites-le savoir !

Ce blog a récemment été migré vers un générateur de sites statiques et je n'ai pas encore eu le temps de remettre un mécanisme de commentaires en place.

Avec un peu de chance, je parviendrai à m'en occuper d'ici quelques semaines ;-)