En PHP, la HEREDOC chaîne déclarations sont vraiment utiles pour la sortie d'un bloc de code html. Vous pouvez le faire analyser dans les variables en les préfixant avec $, mais pour plus de syntaxe compliquée (comme $var[2][3]), vous devez mettre votre expression à l'intérieur d'accolades {}.
En PHP 5, il est possible de faire des appels de fonction dans les accolades {} à l'intérieur d'un HEREDOC de la chaîne, mais vous devez passer par un peu de travail. Le nom de la fonction elle-même doit être stocké dans une variable, et vous devez l'appeler comme il est dynamiquement, un nom de fonction. Par exemple:
$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
Comme vous pouvez le voir, c'est un peu plus bordélique que juste:
$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
Il y a d'autres façons d'ailleurs le premier exemple de code, tels que la rupture de la HEREDOC pour appeler la fonction, ou d'inverser la question et de faire quelque chose comme:
?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
Ce dernier présente l'inconvénient que la sortie est mis directement dans le flux de sortie (sauf si je suis en utilisant le tampon de sortie), ce qui pourrait ne pas être ce que je veux.
Donc, l'essence de ma question est: est-il une façon plus élégante de cette approche?
Modifier sur la base des réponses: Il n'est certainement sembler comme une sorte de moteur de template rendrait ma vie beaucoup plus facile, mais cela m'obligerait essentiellement les inverser mon habitude PHP style. Pas que c'est une mauvaise chose, mais il explique mon inertie.. je suis pour trouver des moyens de rendre la vie plus facile si, si je suis à la recherche dans des modèles maintenant.