В общем есть файл funtions.php
function template($name) {
include $name.'.php';
}
Тут всё понятно. Затем идёт файл main.php
$main = file_get_contents('main.tpl');
$main = str_replace('{static}',template('static'),$main);
echo $main;
Вроде бы понятно зачем он нужен. Дело в том, что в main.php файл static.php подключается, хотя в main.tpl нету строки {static}
Исходя из логики и документации можно предположить, что функция str_replace ожидает вторым параметром значение, а не функцию. Поэтому и происходит вызов template раньше поиска замены. Если static файл, который вы подключаете в template содержит html код - он будет вставлен как есть в поток вывода. От того полагаю у вас сначала идет вывод static.php а затем echo $main.