Шаблонизатор на PHP

Писал для своего небольшого проекта шаблонизатор (для того же проекта: Автозагрузка классов на PHP).
Код шаблонизатора:
<?php
/*
    DANFA https://danfa.net
    Функция template($subject);
    * $subject – имя подключаемого шаблона, без расширения, например index.
    Файл template.php
*/

# Функция Шаблонизатор
function template($subject)                                            
{ 
    # URL страницы
    $page = basename($_SERVER['REQUEST_URI']);
    if (preg_match('/\&/', $page))
    {
        $explode = explode('&', $page);
        $page = $explode[0];
    }
    # END URL страницы
    
    $style_tpl = 'standard';                       # Название стиля
    $dir_cache = 'cache/';                           # Директория хранения кэша
    $dir_tpl =   'style/' . $style_tpl . '/html/'; # Директория хранения шаблонов    
    
    # Проверка шаблона в кэше
    if (file_exists($dir_cache . $style_tpl . '_' . $page . PHP))
    {
        include($dir_cache . $style_tpl . '_' . $page . PHP);        
    }
    else
    {
        if (!file_exists($dir_tpl . $subject . HTML)) # Проверка наличия шаблона
        {
            exit('No Template: <strong>' . $subject . HTML . '</strong>');
        }
        
        ob_start();                               # Включение буферизации
        include($dir_tpl . $subject . HTML);      # Подключение шаблона        
        $cache_tpl = ob_get_contents();           # Получение содержимого буфера        
        ob_end_clean();                              # Отключение и очистка буфера    
        
        # Обработка INCLUDE
        if (preg_match('/\{include (.*?)\}/', $cache_tpl))
        {
            function incl($cache_tpl, $dir_tpl)
            {
                preg_match_all('/\{include (.*?)\}/', $cache_tpl, $include_array);
                foreach ($include_array[1] as $key => $incl)
                {
                    if (file_exists($dir_tpl . $incl . HTML))
                    {
                        $incl_tpl     = '/\{include ' . $incl . '\}/';
                        $incl_replace = file_get_contents($dir_tpl . $incl . HTML);
                        $cache_tpl    = preg_replace($incl_tpl, $incl_replace, $cache_tpl);
                    }
                    else
                    {
                        exit('No Template: <strong>' . $incl . HTML . '</strong>');
                    }
                }
                if (preg_match('/\{include (.*?)\}/', $cache_tpl))
                {
                    $cache_tpl = incl($cache_tpl, $dir_tpl);
                }
                return $cache_tpl;
            }
            $cache_tpl = incl($cache_tpl, $dir_tpl);
        }
        # END Обработка INCLUDE    

        $code = array(
            '/\{echo (.*?)\}/'    => '<?php echo $1; ?>',
            '/\{if (.*?)\}/'      => '<?php if ($1): ?>',
            '/\{elseif (.*?)\}/'  => '<?php elseif ($1): ?>', 
            '/\{else}/'           => '<?php else: ?>',
            '/\{endif}/'          => '<?php endif; ?>',
            '/\{foreach (.*?)\}/' => '<?php foreach ($1): ?>',    
            '/\{endforeach}/'     => '<?php endforeach; ?>'
        );
        
        $cache_tpl = preg_replace(array_keys($code), array_values($code), $cache_tpl);  # Замена кода в шаблоне

        $file = fopen($dir_cache . $style_tpl . '_' . $page . PHP, 'w-');               # Создание нового файла
        fwrite($file, $cache_tpl);                                                      # Запись содержимого буфера в файл
        fclose($file);                                                                  # Закрытие файла
        
        include($dir_cache . $style_tpl . '_' . $page . PHP);                           # Подключение файла кэша    
    }    
}

В функцию "template", в вашем контролере, например, вставляете название шаблона, без расширение файла, например, index:
template('index');

Думаю, разберетесь! Но, если, что, спрашивайте.