En PHP, las declaraciones de cadenas HEREDOC son realmente útiles para generar un bloque de html. Puede hacer que analice en variables simplemente prefijándolas con $, pero para una sintaxis más complicada (como $ var [2] [3]), debe poner su expresión entre llaves {}.
En PHP 5, es posible realizar llamadas a funciones entre llaves {} dentro de una cadena HEREDOC, pero hay que trabajar un poco. El nombre de la función en sí debe almacenarse en una variable, y debe llamarlo como si fuera una función con nombre dinámico. Por ejemplo:
$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
Como puede ver, esto es un poco más complicado que solo:
$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
Hay otras formas además del primer ejemplo de código, como salir del HEREDOC para llamar a la función, o revertir el problema y hacer algo como:
?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
Este último tiene la desventaja de que la salida se coloca directamente en el flujo de salida (a menos que esté usando el almacenamiento en búfer de salida), que podría no ser lo que quiero.
Entonces, la esencia de mi pregunta es: ¿hay una forma más elegante de abordar esto?
Edite en función de las respuestas: Ciertamente parece que algún tipo de motor de plantilla haría mi vida mucho más fácil, pero básicamente me requeriría invertir mi estilo PHP habitual. No es que eso sea algo malo, pero explica mi inercia ... Sin embargo, estoy dispuesto a encontrar formas de hacer la vida más fácil, así que estoy buscando plantillas ahora.
Text {$string1} Text {$string2} Text
en el heredoc.