PHP原生模板渲染可用include+extract实现,配合ob_start()捕获输出,需手动htmlspecialchars转义防XSS,推荐绝对路径引用模板并避免过早抽象。

直接用 include + extract() 就能实现最简模板渲染
PHP 原生没有内置模板引擎,但靠语言特性可以几行代码搭出可用的模板逻辑。核心是:把数据数组导入作用域,再 include 一个纯 HTML/PHP 混写文件。不依赖 Composer、不引入第三方库,适合小项目或快速原型。
常见错误是直接 echo 拼接 HTML —— 难维护、易 XSS、无变量隔离;或者误用 eval() 执行模板字符串 —— 安全风险极高,绝对禁止。
-
extract($data, EXTR_SKIP)把数组键转为变量,EXTR_SKIP防止覆盖已有变量(比如$data自身) - 模板文件(如
user.tpl.php)里直接写,注意手动转义= htmlspecialchars($name) ?>
- 模板中不能访问函数作用域外的变量(除非全局声明),
extract()只影响当前作用域
为什么不用 ob_start() + include?它其实更稳妥
单纯 include 会立刻输出内容,无法捕获、修改或缓存。真实场景中你往往需要「先渲染、再处理」—— 比如加 HTTP 头、套 layout、做 SEO 替换。这时必须用输出缓冲。
function render($template, $data = []) {
extract($data, EXTR_SKIP);
ob_start();
include $template;
return ob_get_clean();
}
// 使用
$html = render('post.tpl.php', ['title' => 'Hello', 'content' => '









