Smarty 是 PHP 生态中经典的模板引擎,核心作用是实现「PHP 业务逻辑代码」和「HTML 视图展示代码」的彻底分离 —— 简单说,就是让程序员专注写后台逻辑,设计师专注做前端页面,不用再在一堆 HTML 里嵌套杂乱的 PHP 代码,是中小规模 PHP 项目(尤其是 CMS、企业官网)提升代码可维护性的主流工具。
PHP 原生开发中,常出现 <?php echo $name;?> 这类代码和 HTML 混写的情况,既难维护又容易让设计师误改逻辑。Smarty 则把视图层抽离成独立的模板文件(.tpl),通过专属语法渲染数据,让代码结构更清晰。
-
简单的模板语法不用写复杂 PHP 代码,模板中用 {$变量名} 调用数据,{if/else} 做逻辑判断,{foreach} 遍历数组,比如:
<!-- 模板文件(index.tpl) -->
<h1>欢迎 {$username}</h1>
{if $is_vip}
<p>VIP 专属权益</p>
{/if}
{foreach $list as $item}
<li>{$item.title}</li>
{/foreach}
PHP 端只需把数据赋值给 Smarty 即可渲染:
// 业务逻辑文件(index.php)
require_once 'Smarty.class.php';
$smarty = new Smarty();
$smarty->assign('username', '张三');
$smarty->assign('is_vip', true);
$smarty->assign('list', ['title'=>'文章1','title'=>'文章2']);
$smarty->display('index.tpl');
-
模板缓存与编译
- 编译:首次渲染模板时,Smarty 会把.tpl 文件编译成 PHP 文件,后续访问直接调用编译后的文件,提升执行效率;
- 缓存:可开启页面级缓存,重复访问同一页面时直接返回缓存结果,减少数据库查询和逻辑运算,适合静态化需求高的场景。
-
安全与灵活配置
- 模板变量自动转义:默认过滤 HTML 特殊字符,防止 XSS 攻击;
- 自定义函数 / 修饰器:可扩展语法,比如写一个
{date_format} 函数格式化时间,或用 {$time|date_format:'%Y-%m-%d'} 修饰器处理数据;
- 模板继承:通过
{extends} {block} 实现模板复用,比如统一的头部 / 尾部只需写一次,子模板继承后仅修改核心内容。
- 中小规模 PHP 项目:企业官网、博客、小型 CMS(如织梦、帝国 CMS 均基于 Smarty 或类似思路);
- 团队协作开发:程序员和设计师分工明确,降低沟通成本;
- 追求快速开发:语法简单,学习成本低,开箱即用。
- 性能略逊于原生 PHP:编译和缓存机制虽优化了效率,但仍比纯 PHP 代码多一层解析;
- 功能较基础:对比 Blade(Laravel)、Twig 等现代模板引擎,缺少命名空间、闭包等高级特性;
- 适合传统 PHP 项目:在框架化开发(如 Laravel、ThinkPHP)普及的当下,Smarty 更多用于老项目维护,新项目较少单独使用。