Aufruf von PHP-Funktionen innerhalb von HEREDOC-Strings

In PHP sind die HEREDOC-String-Deklarationen wirklich nützlich, um einen HTML-Block auszugeben. Sie können Variablen darin analysieren lassen, indem Sie ihnen lediglich $ voranstellen. Bei einer komplizierteren Syntax (wie $ var [2] [3]) müssen Sie Ihren Ausdruck jedoch in geschweifte Klammern setzen.

In PHP 5 ist esist Es ist zwar möglich, Funktionsaufrufe in geschweiften Klammern innerhalb eines HEREDOC-Strings durchzuführen, aber Sie müssen ein wenig arbeiten. Der Funktionsname selbst muss in einer Variablen gespeichert werden, und Sie müssen ihn so aufrufen, als wäre er eine dynamisch benannte Funktion. Zum Beispiel:

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

Wie Sie sehen können, ist dies ein bisschen chaotischer als nur:

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

Neben dem ersten Codebeispiel gibt es noch andere Möglichkeiten, z. B. das Aufrufen der Funktion aus dem HEREDOC zu beenden oder das Problem umzukehren und Folgendes zu tun:

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

Letzteres hat den Nachteil, dass die Ausgabe direkt in den Ausgabestream gestellt wird (es sei denn, ich verwende die Ausgabepufferung). Dies ist möglicherweise nicht das, was ich möchte.

Die Essenz meiner Frage lautet also: Gibt es einen eleganteren Weg, dies zu tun?

Bearbeiten basierend auf Antworten: Es scheint sicherlich, als würde eine Art Template-Engine mein Leben viel einfacher machen, aber es würde erfordern, dass ich meinen gewohnten PHP-Stil grundsätzlich invertiere. Nicht, dass das eine schlechte Sache wäre, aber es erklärt meine Trägheit. Ich bin bereit herauszufinden, wie ich das Leben einfacher machen kann, also suche ich jetzt nach Vorlagen.

Antworten auf die Frage(16)

Ihre Antwort auf die Frage