Общая идея такова: у нас есть программа на PHP, реализующая бизнес-логику. У нас есть набор файлов (обычно -- текстовых), описывающих формат отображаемых данных. И есть некий программный код, который результат работы основного алгоритма отображает согласно этим файлам.
Вот эти текстовые файлы называют шаблонами, а последний помянутый программный блок -- template engine'ом.
Устроен он может быть по-разному. В простейшем случае его алгоритм может быть крайне просто. Например:
1. Загрузить в массив текстовый файл.
2. В файле найти все фрагменеты вида {Имя}.
3. Заменить каждый такой фрагмент на значение глобальной переменной с таким именем.
4. Выдать полученный текст в браузер.
Кроме обработки "на ходу" встречается "компиляция" в PHP. Т.е. если мы имеет вот такой шаблон:

Код:
Hello, {username}!
...то при первом обращении для него создается php-скрипт:

Код:
Hello, <?= username ?>!
....и этот скрипт потом каждый раз инклудится.
И в самом простом случае мы называем шаблоном просто php-скрипт, в котором сами себе клянемся не касаться бизнес-логики и только заниматься формированием внешнего представления.