Über den Sinn und Unsinn einer PHP Template Engine

Vor ein paar Tagen erschien auf dem YouTube Kanal von Vitalij Mik ein Video über PHP Template Engines, welches recht schnell sehr polarisierende Reaktionen in den Kommentaren hervor rief. Augenscheinlich scheint der Einsatz von PHP Template Engines in der Community ein sehr konfliktbehaftetes Thema zu sein. Ich werde mal versuchen zu erklären, warum der Einsatz von Template Engines aus meiner Sicht so überhaupt keinen Sinn ergibt und eher von schlechtem Stil, als von Können zeugt.

Was ist eine Template Engine eigentlich?

Um es mal stark vereinfacht zu formulieren: Eine Template Engine ist eine Art Adapter für die Präsentationsschicht und verspricht einfacheres Handling von Daten innerhalb eines Templates. Oftmals implementiert eine Template Engine eine eigene Syntax, die über die Logik der Template Engine in sauberes PHP übersetzt wird.

<h1>{$title}</h1> 
<ul>
    {foreach item=item from=$items}
    <li>{$item}</li>   
    {/foreach}
</ul>

Das gezeigte Code-Beispiel zeigt die Implementierung einer einfachen foreach-Schleife in der Syntax der Smarty Template Engine.

<h1><?= $title ?></h1>
<ul>
    <?php foreach ($items as $item): ?>
        <li><?= $item ?></li>
    <?php endforeach; ?>
</ul>

Das zweite Code Beispiel zeigt die gleiche foreach-Schleife in einem HTML Template mit PHP umgesetzt.

Welche Vorteile hat eine Template Engine

Welche Vorteile bringt der Einsatz einer Template Engine, wie z.B. Twig , Mustache oder Smarty mit sich? Relativ häufig liest man folgende Punkte, die den Einsatz einer Template Engine rechtfertigen sollen:

  • Saubere und einfachere Syntax innerhalb eines Templates
  • Der Zwang die Business Logik von der Präsentation trennen zu müssen
  • Implementierung von sicherheitsrelevaten Funktionen, wie z.B. das Escaping von Werten bevor sie ausgegeben werden

Weitere Vorteile wollen mir jetzt einfach nicht einfallen. Falls ihr noch relevante Vorteile kennt, die für den Einsatz einer Template Engine sprechen, schreibt sie gern in die Kommentare.

Gibt es auch Nachteile?

Gut, vielleicht bin ich ein wenig voreingenommen. Aus meiner Sicht ist der Einsatz von Template Engines in den wenigstens Szenarien ein Vorteil. Hier mal ein paar Punkte, warum dies so ist:

  • Eine zusätzliche Syntax muss erlernt werden, obwohl PHP von Beginn an den Anspruch mit sich brachte selbst eine Template Engine zu sein
  • Eine zusätzliche Logik wird implementiert, die die Resourcen belastet. Der Speicherverbrauch und die Ausführungszeit werden zu Gunsten einer Logik belastet, die niemand benötigt. Zusätzliche Software muss auf dem aktuellen Stand gehalten und getestet werden.
  • Wenn Template Engines dazu eingesetzt werden die Business Logik von der Präsentation zu trennen, liegt das Problem eher beim Entwickler, der das Prinzip Seperation of Concerns nicht verstanden hat.

Ja, zugegeben klingt das ein bisschen offensiv. Die Nachteile liegen aber auf der Hand.

Oftmals wird tatsächlich gesagt, dass der Einsatz einer Template Engine Vorteile für die Designer mit sich bringt, die dann einfach Teile des Templates an der Stelle verwenden können, an der sie tatsächlich benötigt werden. Ob der Designer jetzt einen foreach-Block lesen kann, der mit PHP oder mit Smarty geschrieben wurde, ist aber vollkommen irrelevant. Fakt ist, dass der Designer immer eine Syntax beherrschen muss. Wenn er sich Smarty oder Twig aneignen kann, kann er sich auch gleich die PHP Syntax in Templates aneignen.

Viele Entwickler denken auch nicht drüber nach, dass der Einsatz einer Template Engine auch immer Resourcen frisst. Natürlich leben wir heute in einer Zeit, in der der Grundsatz, dass Anwendungen so performant wie möglich sein müssen, durch große Arbeitsspeicher und performantere CPUs ein wenig relativiert wurde. Dennoch ist es aus meiner Sicht unsinnig eine Logik zu implementieren, die eine eigene Syntax bereit stellt, um diese dann während der Laufzeit wieder in reines PHP zurück zu interpretieren. Dann kann man Templates auch gleich mit PHP schreiben und auf diese ganze Ruminterpretiererei verzichten. Zudem schafft man sich auch immer ein zusätzliches Modul an, welches aktualisiert und getestet weden muss. Template Engines kosten am Ende eines Tages also bares Geld. Template Engines sind in keinem Fall eine Erleichterung. Für niemanden. Weder für den Designer noch für den Entwickler. Natürlich könnte man jetzt sagen, dass die Laufzeitprobleme durch Caching und sonstige zusätzliche Mechanismen gelöst werden könnten. Das alles sind aber nur Hilfsmittel, die man ohne den Einsatz einer Template Engine nicht brauchen würde.

Kommen wir zu dem Punkt, den ich als größte Krücke von PHP Template Engines sehe. Der große, so gut klingende Vorteil, dass man gezwungen wird Business Logik von der Präsentation zu trennen. Der Vorteil, der so hübsch klingt, aber keiner ist. Wenn ein Entwickler eine Template Engine benötigt, um die Business Logik von der Präsentation zu trennen, sollte man das Problem dahinter auch klar adressieren. Der Schwachpunkt ist da eher der Entwickler, der darin endet, dass er Business Logik in sein HTML Template schreibt. Davor wird ihn auch keine Template Engine retten. Denn alle gängigen Template Engines ermöglichen dem Entwickler Business Logik in sein Template zu implementieren. Es wäre weitaus sinnvoller den Entwickler an diesem Punkt noch mal an die Hand zu nehmen und ihm die Basics im Sinne von Seperation of Concerns zu erklären.

Fazit

So hart das jetzt klingen mag. PHP Template Engines haben sich selbst überlebt. Man benötigt sie einfach nicht oder nicht mehr. PHP war von Anfang an auch als Template Engine gedacht, die man leicht erlernen kann. Seitdem hat sich PHP weiter entwickelt. Gängige Software-Paradigmen gelten eben auch für die Entwicklung mit PHP. Wenn ein Entwickler verstanden hat, dass man Business Logik von der Präsentation zu trennen hat, bin ich mir sicher, dass eine Template Engine nur noch als Einschränkung empfunden wird, die keinerlei Mehrwert bietet.

About Author: Marcel
Ich bin Senior PHP Developer bei MM Newmedia. Seit 2005 bin ich begeisterter Webentwickler und arbeite als Freelancer für namenhafte Firmen und entwickle jede Menge abgefahrenes Zeug und berichte darüber in meinem Blog.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.