In PHP sind die HEREDOC-Zeichenfolgendeklarationen sehr nützlich für die Ausgabe eines HTML-Blocks. Sie können es in Variablen analysieren lassen, indem Sie ihnen $ voranstellen. Für eine kompliziertere Syntax (wie $ var [2] [3]) müssen Sie Ihren Ausdruck jedoch in {} Klammern setzen.
In PHP 5, es ist möglich , Funktionsaufrufe innerhalb von {} Klammern innerhalb einer HEREDOC Zeichenfolge, aber Sie müssen , um tatsächlich durch ein bisschen Arbeit gehen zu machen. Der Funktionsname selbst muss in einer Variablen gespeichert sein, und Sie müssen ihn so aufrufen, als wäre er eine dynamisch benannte Funktion. Beispielsweise:
$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
Wie Sie sehen können, ist dies etwas chaotischer als nur:
$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
Neben dem ersten Codebeispiel gibt es noch andere Möglichkeiten, z. B. das Ausbrechen des HEREDOC zum Aufrufen der Funktion oder das Umkehren des Problems und das Ausführen von Aktionen wie:
?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
Letzteres hat den Nachteil, dass die Ausgabe direkt in den Ausgabestream gestellt wird (es sei denn, ich verwende die Ausgabepufferung), was möglicherweise nicht das ist, was ich möchte.
Das Wesentliche meiner Frage ist also: Gibt es einen eleganteren Weg, dies zu erreichen?
Bearbeiten basierend auf Antworten: Es scheint sicher, dass eine Art Template-Engine mein Leben viel einfacher machen würde, aber ich müsste im Grunde meinen üblichen PHP-Stil umkehren. Nicht, dass das eine schlechte Sache wäre, aber es erklärt meine Trägheit. Ich bin bereit, Wege zu finden, um das Leben einfacher zu machen, also schaue ich mir jetzt Vorlagen an.
Text {$string1} Text {$string2} Text
im Heredoc verwenden.