No Drupal 7, temos a famosa PHPTemplate Engine para renderização dos templates.
Na verdade, a função theme() permite que se sobrescreva a engine de renderização de template.
Porém, por padrão, é usada essa função theme_render_template():
function theme_render_template($template_file, $variables) {
// Extract the variables to a local namespace
extract($variables, EXTR_SKIP);
// Start output buffering
ob_start();
// Include the template file
include DRUPAL_ROOT . '/' . $template_file;
// End buffering and return its contents
return ob_get_clean();
}
Basicamente, usamos a função ob_start, para interromper a saída do script PHP e começar a gravar tudo em um buffer. (ob é a abreviação de output buffer, ou seja, buffer de saída e não isto aqui)
Aí, fazemos um include do arquivo de template. Esse include irá simplesmente enviar para a saída o resultado do arquivo de template, já substituindo as variáveis locais extraídas pela função extract.
A função finaliza retornando com ob_get_clean, que interrompe o processo de jogar a saída no buffer e retorna tudo o que foi gerado para uma string.
Antes de encerrar o post curto, queria apenas mostrar o que é possível fazer com a função extract:
$var_array = array ("cor" => "azul",
"tamanho" => "medio",
"forma" => "esfera");
extract ($var_array);
echo "$cor, $tamanho, $forma, n";
Ou seja, as variáveis $cor, $tamanho e $forma aparecem como variáveis locais após o uso da função extract!