Как то так:
function template($path, array $assign = []){
static $bufferOff;
extract($assign);
// Если первый вызов, то используется ob_start
if(is_null($bufferOff)){
$bufferOff = true;
ob_start();
include($path);
return ob_get_clean();
}
// Для последующих вызовов буферизация не используется
else{
include($path);
}
}