写Smarty模板的时候,注释是个不起眼但特别容易出问题的知识点。有人把HTML注释的写法直接搬到Smarty里用,结果注释里的模板变量照样被解析执行;有人明明写了注释,前端页面源代码里却找不到,怀疑是自己写错了。其实这些现象背后都和Smarty注释的工作机制有关,这篇文章就把Smarty注释语句的语法、特点以及常见问题一次性讲明白。

一、Smarty注释的基本语法
Smarty的注释使用一对星号包裹,放在左右定界符之间,写法是{* 注释内容 *}。这里的左右定界符默认是左花括号和右花括号,注释内容可以是任意文字,包括中文、英文、说明性文字等。比如你在模板中写了{* 这里是头部区域,负责加载公共样式 *},这一行在最终输出的HTML里会被完全剔除,用户在浏览器里查看源代码是看不到的。
和HTML注释<!-- 注释内容 -->相比,两者有本质区别。HTML注释只是让浏览器不显示这部分内容,但注释文字仍然会随页面一起发送到客户端,用户右键查看源代码就能看到,甚至能看到注释里写的业务逻辑、调试信息,存在信息泄露的风险。而Smarty注释是在服务器端模板编译阶段就被移除的,压根不会进入最终的输出结果,既不占带宽,也不会暴露任何内容。所以在模板开发阶段,涉及敏感信息的说明文字,优先用Smarty注释而不是HTML注释。
另外要提醒一点,Smarty注释里不要写模板定界符本身。比如{* 这是{*变量*}的说明 *}这种写法,解析器可能提前认为注释已经结束,导致后面的内容被当成模板语法处理,从而出现莫名其妙的报错。注释内容里尽量只写纯文字说明。
二、Smarty注释的常见使用场景
第一个场景是给模板区块做说明。一个稍微复杂的页面模板往往有几百行,头部、导航、轮播、列表、底部各占一块,如果不在每个区块开头写一行注释,过几个月再维护时自己都看不懂。可以在每个区块开始处写{* ===== 头部导航 开始 ===== *},结尾处写{* ===== 头部导航 结束 ===== *},用统一的标记格式让模板结构一目了然。
第二个场景是临时屏蔽某段代码。调试模板时,某段逻辑暂时不想执行,又不想直接删掉,可以整段包进注释里。需要注意的是,被注释掉的这部分如果包含Smarty标签,只要不出现定界符配对混乱,整体都会被忽略,这一点比HTML注释安全得多,因为HTML注释里的Smarty标签仍然会被解析,变量仍会输出。
第三个场景是版本记录和协作说明。团队协作开发时,在模板文件开头写几行注释,说明文件用途、修改人、修改时间、注意事项,这些信息只在源码层面可见,不会影响线上页面,是模板开发中很实用的习惯。
三、Smarty注释常见问题解答
1. 为什么写了注释,页面源代码里看不到?
这正是Smarty注释的正常表现,不是bug。注释在模板编译成编译文件时就被删除了,输出到浏览器的HTML里自然没有踪影。如果你希望注释保留在页面源代码里供前端同事查看,那就改用HTML注释写法。
2. 注释支持多行内容吗?
支持。开头写{*之后,可以换行写多行说明文字,最后以*}结束即可,中间的换行、空格都会被保留在源文件里,但输出时整块内容连同包裹符号一起被移除。
3. 修改了定界符后注释写法要跟着变吗?
要变。如果项目里把左定界符改成了<{、右定界符改成了}>来避免和JavaScript花括号冲突,那注释就要写成<{ 注释内容 }>这种形式了吗?并不是,正确写法是把注释放在新定界符的内部星号形式,即<{* 注释内容 *}>。核心规则是:星号注释必须紧跟当前配置的左右定界符。
4. 注释可以嵌套吗?
不建议嵌套,也不可靠。Smarty解析注释时遇到第一个*}就认为注释结束,所以{* 外层 {* 内层 *} 外层继续 *}会在第一个内层结束符处截断,后面的文字会被当作模板内容解析,轻则原样输出,重则报语法错误。需要多层注释时,建议分段写或换用不同的标记文字。
5. 注释会影响性能吗?
几乎不会。模板编译是一次性的,注释在编译阶段就被剥离,编译后的PHP文件里不含注释内容,后续每次请求都是执行编译文件,注释的存在与否不影响运行性能,只是让编译产物更干净。
四、使用Smarty注释的几点建议
首先,养成随手写注释的习惯,尤其是区块边界和复杂逻辑处,注释是写给未来的自己和同事看的。其次,注释内容要写清楚为什么这么写,而不只是重复代码本身,像{* 循环输出商品列表 *}这种注释价值有限,写明{* 此处按销量倒序取前10条,后台可配置数量 *}会更有用。
其次,注意区分注释的适用范围。和页面展示相关、需要让前端看到的说明用HTML注释;和模板逻辑、后端业务相关的说明一律用Smarty注释。涉及敏感信息如接口地址、账号规则、内部调试提示的内容,坚决不要用HTML注释,避免泄露。
最后,团队内最好约定统一的注释规范,比如区块注释的格式、文件头注释包含哪些字段,这样不管谁接手模板,都能快速看懂结构。把注释这件小事做好,模板的可维护性会提升一大截。
Smarty注释Smarty模板注释Smarty语法修改时间:2026-09-03 16:27:05