No PHP, as declarações de string HEREDOC são realmente úteis para a saída de um bloco de html. Você pode fazer com que ele analise as variáveis apenas prefixando-as com $, mas para uma sintaxe mais complicada (como $ var [2] [3]), você deve colocar sua expressão entre {} colchetes.
No PHP 5, é possível fazer chamadas de função entre {} colchetes dentro de uma string HEREDOC, mas você precisa trabalhar um pouco. O nome da função em si deve ser armazenado em uma variável e você deve chamá-la como se fosse uma função nomeada dinamicamente. Por exemplo:
$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
Como você pode ver, isso é um pouco mais confuso do que apenas:
$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
Existem outras maneiras além do primeiro exemplo de código, como sair do HEREDOC para chamar a função ou reverter o problema e fazer algo como:
?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
O último tem a desvantagem de que a saída é colocada diretamente no fluxo de saída (a menos que eu esteja usando buffer de saída), o que pode não ser o que desejo.
Então, a essência da minha pergunta é: existe uma maneira mais elegante de abordar isso?
Editar com base nas respostas: certamente parece que algum tipo de mecanismo de modelo tornaria minha vida muito mais fácil, mas exigiria que eu basicamente invertesse meu estilo PHP usual. Não que isso seja uma coisa ruim, mas explica minha inércia. Porém, estou disposto a descobrir maneiras de tornar a vida mais fácil, então estou procurando modelos agora.
Text {$string1} Text {$string2} Text
no heredoc.