hi user-287,
momentan setze ich mich "zufällig" intensiv mit diesem thema auseinander. ich sehe das ganze so:
Warum sollte man in Templates, die man verwendet um HTML von PHP zu trennen, trotzdem PHP verwenden? Wäre inkonsequent.
falsch, das ist definitiv nicht inkonsequent. das reicht schon, wenn du dir mal ein webframework wie symfony anschaust. dort ist genauso php in den templates positioniert. ursprünglich wurde php für genau diese aufgabe geschaffen, nämlich business logik in C code von präsentations logik zu trennen.
eigentlich haben template engines die aufgabe html und code dynamisch zu verbinden bei php ist das ganze ein bisschen anders, denn php ist ja schon eine in html eingebettet scriptsprache. entwickler von template engines denken jetzt, man müsse mit aller gewalt php von html trennen und führen dann eine eigene template sprache ein. damit wird der wartungsaufwand nicht unbedingt geringer.. kommt drauf an wie sauber bzw. unsauber programmiert wird.
im grunde geht es aber um einen ganz anderen aspekt, nämlich um die aufteilung der anwendung in business logik und präsentations logik bzw. in MVC. anwendung dürfen oder sollen PHP in allen ebenen verwenden, nur der zweck für den die sprache eingesetzt wird, unterscheidet sich. bevor man sich an die entwicklung einer eigenen engine macht sollte man das erst mal verstanden haben.
jetzt zur frage, ob template engines php als template sprache verwenden sollten oder nicht:
die architektur einer anwendung sollte sich grundsätzlich am MVC prinzip orientieren. damit verbunden ist auch die unterteilung in business logik und präsentations logik. unter präsentations logik versteht man logik die zum aufbereiten der templates benötigt wird, also im grunde die verwendung einer template sprache. um den anforderungen gerecht zu werden, sollte nur dort präsentations logik im template eingesetzt werden, wo es sinn macht. (strukturen, schleifen und höchstens ein paar view helper) smarty macht jetzt nichts anderes als einen pseudo syntax einzuführen. damit habe ich zwar tolle möglichkeiten, aber natives php kann das ohnehin schon. (aktivier mal die short tags in der php.ini ... dann unterscheidet sich smarty äußerlich gar nicht so von php
)
hier noch ein paar punkte, die dich vielleicht überzeugen bzw. davon abhalten keine "tolle" template sprache zu erfinden:
1) du musst mindestens eine ausgeklügelte cache technik einbauen, damit der overhead aufgrund der template sprache kompensiert wird. ansonsten wirst du nicht glücklich. smarty ist schnell, aber das liegt an der kompilierung der templates, nicht nur am cashing. savant ist aber auch schnell.. ohne caching, wenn ich micht nicht täusche.
2) je nach projekt umfang tauchen fehler im template auf, egal ob php als template sprache oder sonst was. php lässt sich debuggen, deine template sprache nicht. höchstens du baust dafür auch noch einen speziellen debugger (viel spaß
)
3) noch zum sicherheitsaspekt: mit einer eigenen template sprache tauchen genau so sicherheitslöcher auf, wie wenn du php verwendest. das hängt eindeutig vom programmierstil ab, also vom know how der template designer.
engines wie smarty konzentrieren sich zu stark auf das V in MVC. sowas wie einen controller gibt es dort nicht. ich will smarty damit nicht runter machen, es liegt letztendlich an den programmieren wie gut bzw. schlecht ihre anwendung wird.
viele grüße,
mab
P.S.:
http://bastian-frank.de/front_content.php?idart=47
http://de.wikipedia.org/wiki/Diskussion:Template_Engine