dedlfix: Sandbox implementieren?

Beitrag lesen

echo $begrüßung;

[...] Template-Engine [...] PHP als Sprache [...]
Dennoch soll der in den Templates enthaltene PHP-Code nicht auf die darüberliegenden Klassen zugreifen können, also komplett unabhängig von der umgebenden Anwendung sein und eigenständig ausgeführt werden. Wie kann ich sowas realisieren?

Komplett abschotten ist sicherlich nicht möglich, wenn man keinen zweiten Prozess für die Template-Engine instantiieren will. Aber ist das so rigoros denn überhaupt nötig? Ich finde das, was die Zend_View-Komponente vom Zend Framework macht, schon eine recht brauchbare Lösung.

Eine abstrakte Klasse (Zend_View_Abstract) deklariert alle Funktionen und Eigenschaften als privat, die das Template nicht aufrufen darf. Die Eigenschaften, auf die das Template zugreifen soll, werden als public der Instanz hinzugefügt, bzw. über __get() verfügbar gemacht. Das von Zend_View_Abstract abgeleitete Zend_View hat nur die Methode zum Ausführen des Templates, und damit kann das Template nur auf die freigegebenen Variablen und public-Funktionen zugreifen (und auf das, was sonst noch so global verfügbar ist. Und das kann man bei konsequenter OOP auf recht wenig bis gar nichts beschränken.)

echo "$verabschiedung $name";