☰ PHPTemplateHeredoc
 

Heredoc, template PHP

La syntaxe heredoc est utilisée pour écrire les strings sur plusieurs lignes. Elle commence par <<< suivi d'un identifiant quelconque, le même identifiant est utilisé pour terminer le string.

L'identifiant de fermeture doit être le premier caractère de la ligne, il doit être suivi du ; php qui termine la ligne, aucun espace ne peut suivre.

$string = <<<HEREDOC
Le chien vert
Le chat bleu
HEREDOC;

Les variables sont remplacées par leur valeur comme dans les chaines encadrées par ".

$nom = 'Jean';
$chaine = <<<HEREDOC
Mon nom est $nom
HEREDOC;

Quand un $ est rencontré, le parseur prend autant de caractères que possible pour former un nom de variable valide et y substituer sa valeur. Pour spécifier explicitement la fin du nom, il faut l'encadrer d'accolades { }. L'accolade de gauche peut être juste avant le $ ou juste avant le nom de la variable. Il est de bonne pratique d'utiliser systématiquement les accolades, afin de bien distinguer les variables.

$nom = 'chien';
echo <<<EOT
Ce sont des $noms      // invalide, la variable est $nom et pas $noms
Ce sont des {$nom}s    // valide
Ce sont des ${nom}s    // valide
EOT;

On peut ainsi évaluer des tableaux et des objects entre accolades, leurs noms commencent par $.

echo <<<EOT
Le 5ème élément est {$el[5]}
EOT;

On ne peut utiliser directement ni des fonctions, ni des constantes, ni des expressions, car elle ne commencent pas par un $. On peut contourner cela en donnant à une variable le nom de la fonction à utiliser.

$strtolower = 'strtolower';
echo <<<EOT
Je m'appelle {strtolower('Jean')}   //invalide, pas de $
Je m'appelle {$strtolower('Jean')}  //valide
echo <<<EOT

Il est très pratique d'utiliser une fonction, dont le nom commence par $ et qui retourne le paramètre.

$fn = function($data){return $data;};
$chaine = <<<HEREDOC
Mon nom est {$fn(strtolower('Jean'))}
Le résultat est {$fn(3 + 4)}
HEREDOC;

Le caractère d'échappement est \ , nécessaire pour échapper le \ lui-même, le caractère $, et parfois d'autre caractères comme ".

La substitution fonctionne de la même manière pour les strings placés entre " que pour le format heredoc.

Le format newdoc <<<'NEWDOC' qui encadre l'identifiant entre ' retourne le string sans faire aucune substitution.

Le format newdoc <<<"NEWDOC" qui encadre l'identifiant entre " fonctionne exactement comme le format heredoc.