Tak jak pisał @viking nie ma najmniejszego sensu wyważać otwartych drzwi, są już gotowe rozwiązania takie tak Smarty, ktoś już wpadł na ten sam pomysł i go zrealizował

Możesz zobaczyć, że użycie tego jest proste w
dokumentacji.
Cytat
Nie chciałbym instalować żadnych dodatków.
A jaka to różnica czy dodasz swój własny skrypt, czy gotowy

Poza tym "instalujesz" tylko u siebie, a wrzucasz już wygenerowane szablony, chyba że chcesz zachować dynamikę niektórych zmiennych to wtedy zostawiasz echo.
Cytat
Pytam o najprostszą koncepcję przy użyciu języka PHP.
Jeśli dalej nie jesteś przekonany
function generateTpl($file, $data){
// Tworzysz nowy plik wynikowy, możesz też po prostu wyświetlać kolejne linie (echo)
$tp = fopen($file, "wb");
// Czytasz kolejne linie szablonu
$fd = fopen('templates/'.$file, "r"); if($fd && $tp){
// RegExem wstawiamy "zmienne" z tablicy
// Wypełniamy nowy plik
}
}else{
return false;
}
}
Zamianę wykonuje
preg_replace_callback (min. PHP 5.3.0), wzorcem określasz w jaki sposób zmienne są umieszczane w szablonie, ja wzorowałem się na smarty, więc /\{\$(\w+)\/ to np. {$foo} (większość znaków ma specjalne znaczenie dlatego poprzedzone są \ ). Jeśli zastanawiałoby Cie użycie use, może
przykład to wyjaśni.
Do funkcji jako drugi parametr przekazujesz tablicę asocjacyjną, gdzie klucze są nazwami zmiennych. Jeśli chcesz pobierać dane z bazy do tworzenia szablonu, najlepiej jeśli nie będziesz tworzył każdego pola jako osobną zmienną i w rezultacie przechowywał jeden rekord z ogromną ilością pól tylko tworzysz pola name oraz value, każdy rekord to kolejna zmienna. Później wypełniasz tablicę $data[$row['name']] = $row['value'];