<p>ThinkPHP模板注释仅支持{// 注释}和{/ 注释 /}两种语法,编译时被彻底剔除,用于提升协作效率而非代码文档,需配合缓存管理与PHP注释协同定位逻辑源头。</p>

ThinkPHP模板注释本身不参与PHP执行,也不被框架解析为逻辑,但它直接影响团队协作效率和长期维护质量。关键在于区分“模板注释”和“PHP代码注释”——前者只在.tpl或.html模板文件中生效,后者属于PHP语言层,两者工具链完全不同。
模板注释的两种写法必须严格对应语法
ThinkPHP模板引擎(ThinkTemplate)支持两类原生注释语法,且仅在这两种形式下才被编译器识别并彻底剔除:
-
单行注释:使用
{// 注释内容},注意{和//之间不能有空格,结尾}不可省略 -
多行注释:使用
{/* 这是模板多行注释 */},内部可换行,但不能嵌套另一组{/* */}
错误示例:{ /* 错误:{后有空格 */ } 或 {// 没有闭合} —— 这类写法会导致模板编译失败或注释残留到前端HTML中。
不要把模板注释当成代码文档来用
模板注释不是PHPDoc,IDE、phpstan、PHP_CodeSniffer等静态分析工具完全无法读取它。它的唯一作用是让前端开发或后端同事快速理解某段模板逻辑的意图,比如:
立即学习“PHP免费学习笔记(深入)”;
- 说明某个
<volist>循环为何要加empty判断 - 标注某块
{include file="xxx"}正在临时替换旧版布局 - 标记“此处需等UI确认动效后再解注释”
避免写成:{// 计算用户积分总和}——这类描述已在标签本身(如{:getTotalPoints($user)})中体现,属于冗余注释。
配合模板缓存机制做注释清理
ThinkPHP模板默认启用编译缓存,注释会在首次编译时被清除,不输出到最终HTML。但若你手动修改了模板文件却没刷新缓存,旧注释可能仍存在于Runtime/Cache下的编译PHP文件中,造成误导。
- 开发阶段建议关闭缓存:
'template' => ['cache' => false],确保每次看到的是实时注释效果 - 上线前检查
Runtime/Cache/目录,确认无残留调试性注释(如{// TODO: 后续对接新API})泄露到生产环境 - CI流程中可加入简单校验脚本,扫描所有
.html或.tpl文件,禁止出现{// DEBUG或{/* TEMP类关键词
与PHP代码注释协同管理变更点
当模板行为由PHP逻辑驱动(如{$list|default='[]'}依赖控制器赋值),注释应指向源头而非就地解释。例如:
- 模板中写:
{/* 数据来自UserModel::getActiveList(),含缓存策略 @see app/model/UserModel.php line 87 */} - 而不是在模板里重复说明“这个列表只显示状态为1的用户”
这样既保持模板轻量,又让维护者能顺藤摸瓜定位到真实业务逻辑所在,也便于代码扫描工具统一追踪变更影响范围。



















