Llamando funciones PHP dentro de cadenas HEREDOC

En PHP, las declaraciones de cadena HEREDOC son realmente útiles para generar un bloque de html. Puede hacer que se analice en variables simplemente con el prefijo de $, pero para una sintaxis más complicada (como $ var [2] [3]), debe poner su expresión entre llaves {}.

En PHP 5,es es posible realizar llamadas a funciones dentro de {} llaves dentro de una cadena HEREDOC, pero tiene que pasar por un poco de trabajo. El nombre de la función en sí debe almacenarse en una variable, y debe llamarse como si fuera una función con nombre dinámico. Por ejemplo:

<code>$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
</code>

Como puedes ver, esto es un poco más complicado que solo:

<code>$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
</code>

Hay otras formas además del primer ejemplo de código, como salir de HEREDOC para llamar a la función, o revertir el problema y hacer algo como:

<code>?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
</code>

El último tiene la desventaja de que la salida se coloca directamente en el flujo de salida (a menos que esté usando el búfer de salida), que podría no ser lo que quiero.

Entonces, la esencia de mi pregunta es: ¿hay una manera más elegante de abordar esto?

Edición basada en respuestas: Ciertamente, parece que algún tipo de motor de plantilla me haría la vida mucho más fácil, pero básicamente requeriría que invirtiera mi estilo PHP habitual. No es que eso sea algo malo, pero explica mi inercia. Estoy preparado para descubrir formas de hacer la vida más fácil, así que ahora estoy buscando plantillas.

Respuestas a la pregunta(16)

Su respuesta a la pregunta