Никаких префиксов и постфиксов в шаблонном движке нет...
Sumo 15.09.2016 11:29
Для каждого шаблона делается класс с уникальным именем (math:uid64). Из текста шаблона выкусываются директивы #@import и #@base.
Файлы из директивы import компилируются процессом в текущий класс. После этого в текущий класс компилируются методы шаблона. Одноименные методы затираются. Это аналог partial.
Файлы из директивы base компилируются в отдельный класс с уникальным именем (math:uid64). Этот класс становится предком класса для шаблона. В данном случае одноименные методы не затираются, а лежат в предке и наследнике. Т.е. срабатывает обычное наследование.
Директивы import и base работают рекурсивно, т.е .создается необходимое количество классов-предков для base и импортируются все методы из всех файлов, указанных в import.
В классы заворачиваем исключительно для выделения шаблонам отдельного пространства имен и данных. Из «собранного класса» делаем объект, который и зовем из контролера.
Вот и вся история. Никаких «прототипов» и синглтонов для шаблонов в принципе не нужно, все решается тривиальными средствами ООП. Один и тот же файлик с методами можно совершенно безопасно включать в другие шаблоны, деалать предком и т.п. Фактически для шаблонов получается свое упрощенное ООП с наследованием, только без указания директив CLASS и BASE.
Код шаблонизатора в pf — 400 строк примитивного кода (в pf2 еще меньше — 300). Ну посмотрите наконец на реализацию и не делайте предположений про префиксы, постфиксы и то, что я ну просто обязан использовать прототипы. :)