Ich habe diese Frage über Stackoverflow gelesen:
/programming/104516/calling-php-functions-within-heredoc-strings
und die akzeptierte Antwort lautet:
template.php:
<html> <head> <title> <? = $ title?> </ title> </ head> <body> <? = getContent ()?> </ body> </ html>
index.php:
<? php $ title = 'Demo Title'; Funktion getContent () { return '<p> Hallo Welt! </ p>'; } include ('template.php'); ?>
Für mich ist das oben Genannte in dem Sinne nicht gut strukturiert, dass template.php von Variablen abhängt, die in anderen Skripten definiert sind. Und Sie verwenden ein include (), um Code auszuführen, wenn Sie dies tun include('template.php')
(im Gegensatz zu include (), um eine Klasse oder eine Funktion einzuschließen, die nicht sofort ausgeführt wird).
Ich denke, ein besserer Ansatz ist es, Ihre Vorlage in eine Funktion zu packen:
template.php:
<? php Funktionsvorlage ($ title, $ content) { ob_start (); ?> <html> <head> <title> <? = $ title?> </ title> </ head> <body> <? = $ content?> </ body> </ html> <? php return ob_get_clean (); } ?>
index.php:
<? php require_once ('template.php'); Druckvorlage ('Demo-Titel', '<p> Hallo Welt! </ p>'); ?>
Ist der zweite Ansatz besser? Gibt es einen noch besseren Weg, dies zu tun?
extract($this->properties);
die Eigenschaften direkt vor der include-Anweisung in Variablen extrahieren.Eine Vorlage hängt immer von externen Variablen ab, und da PHP eine dynamische Sprache ist, kann beim Kompilieren nicht erzwungen werden, dass sie vorhanden ist. Der erste Ansatz ist also wahrscheinlich in Ordnung. es gibt jedoch noch ein paar probleme:
Ein sehr einfacher Ansatz besteht darin, eine Funktion, vorzugsweise mit einem sehr kurzen Namen, zu schreiben, die sich um beide kümmert. es zu nennen
_()
scheint eine übliche Konvention zu sein. Eine einfache Version könnte so aussehen:Und dann würden Sie in Ihrer Vorlage Folgendes tun:
Weitere Dinge, die mit der
_()
Funktion zu tun haben :htmlspecialchars
Aufrufs zuzulassen , wenn Sie HTML-Code anstelle von unformatierten Zeichenfolgen übergeben möchten.Array
undObject
, sondern etwas Sinnvolles (oder leere Zeichenkette).quelle
Das erste
template.php
ist einfacher zu laden als es ist in Dreamweaver / Bluegriffon / Was auch immer und wird von einem serverseitigen, nicht versierten Webdesigner bearbeitet, das zweite ... nun, es könnte immer noch irgendwie sein, aber es ist wahrscheinlicher, dass es während des Bearbeitungsprozesses kaputt geht .Ich würde mit dem ersten Schritt fortfahren , um das Erscheinungsbild von HTML mit Vorteilen zu erhalten , wie es Designer von Drittanbietern normalerweise bevorzugen.
quelle
Da Codeigniter mein bevorzugtes Framework ist, schlage ich Ihnen eine Codeigniter-Lösung vor:
Ihre Vorlage würde so aussehen:
Und Sie würden es rendern, indem Sie die Klasse instanziieren, Daten in einem Array als Konstruktorparameter übergeben und die Methode 'render' aufrufen:
Auf diese Weise führen Sie den enthaltenen Code nicht direkt aus, und Sie behalten auch die Lesbarkeit Ihrer Vorlage bei, sodass die Designer zufrieden sind.
quelle
PHP ist keine Programmiersprache. Daher ist das Schreiben mit starker Typisierung nicht möglich, wenn Ihre Sprache kein echtes Typensystem hat. Aber Sie können Ihrer IDE wie PHP-Storm helfen, den gewünschten Trick zu machen ...
Ihre Ansichtsdefinition:
Ihre Vorlagendatei:
quelle