首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ThinkTemplate!高性能 PHP 编译型模板引擎

ThinkTemplate!高性能 PHP 编译型模板引擎

作者头像
Tinywan
发布2025-09-11 19:30:10
发布2025-09-11 19:30:10
4600
代码可运行
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0
代码可运行

概述

ThinkTemplate 是一个基于 XML 的高性能编译型模板引擎,无需任何外部依赖,专为高效和灵活性设计。它最初作为 ThinkPHP 框架的内置模板引擎,现已支持独立使用,成为开发者构建动态模板的理想选择。凭借其动态编译、缓存机制以及 XML 架构,ThinkTemplate 在简洁性和强大功能之间实现了完美平衡。

核心特性

  • 自定义标签定界符:支持为普通标签和标签库标签自定义开始和结束定界符。
  • 原生 PHP 代码支持:允许在模板中直接嵌入 PHP 代码,提升灵活性。
  • 文件包含:支持引入外部模板文件,便于模块化开发。
  • 多级标签嵌套:支持复杂的模板结构,满足多层次设计需求。
  • 布局模板功能:提供可复用的布局模板,确保页面设计一致性。
  • 高效编译与缓存:模板编译为 PHP 文件并缓存,多次运行效率极高,模板更新时自动刷新缓存。
  • 系统变量直接输出:无需赋值即可直接使用系统变量。
  • 多维数组快速输出:轻松处理复杂数据结构。
  • 变量默认值:支持为变量设置默认值,避免空值错误。
  • HTML 空白优化:自动去除页面代码中的多余空白,提升输出效率。
  • 变量调节器与格式化:支持对模板变量应用过滤器和格式化功能。
  • 限制 PHP 函数与语法:可禁用特定 PHP 函数或语法,增强安全性。
  • 标签库扩展:通过标签库方式扩展功能,支持自定义逻辑。

每个模板文件在执行时都会生成一个编译后的缓存文件(本质是一个可运行的 PHP 文件)。由于其编译型特性,模板缓存无法关闭,即使禁用缓存,每次渲染时也会重新生成缓存文件,确保性能一致。

标签类型

ThinkTemplate 支持两种标签类型,各自用途明确,满足不同开发需求:

标签类型

用途描述

普通标签

用于变量输出、函数过滤和基本运算操作。

XML 标签

也称标签库标签,用于逻辑判断、循环输出、文件包含等,并支持功能扩展。

这种双标签体系兼顾了简单任务的便捷性和复杂逻辑的强大支持,适用于各种开发场景。

普通标签

普通标签主要用于变量输出和模板注释,默认使用 {} 作为定界符。例如:

  • {$name}:输出变量 name 的值。
  • {$vo.name}:访问嵌套属性。
  • {$vo['name']|strtoupper}:对变量应用过滤器(如转换为大写)。

为确保正确解析,标签定义必须紧跟定界符,中间不能有空格或换行。例如,{ $name} 会被视为普通文本,而非模板标签。

开发者可通过修改 template.php 配置文件自定义定界符:

代码语言:javascript
代码运行次数:0
运行
复制
// 普通标签定界符
'tpl_begin' => '<{',
'tpl_end' => '}>'

修改后,{name} 需写为 <{

XML 标签

XML 标签功能更强大,支持变量输出、文件包含、条件控制、循环输出等,并可通过自定义标签库扩展功能。默认情况下,标签库标签与普通标签共享 {} 定界符,但可单独配置:

代码语言:javascript
代码运行次数:0
运行
复制
// 标签库标签定界符
'taglib_begin' => '<',
'taglib_end' => '>'

例如,条件语句:

代码语言:javascript
代码运行次数:0
运行
复制
{eq name="name" value="value"}
  相等
{else/}
  不相等
{/eq}

修改定界符后,需调整为:

代码语言:javascript
代码运行次数:0
运行
复制
<eq name="name" value="value">
  相等
<else/>
  不相等
</eq>

这种灵活性确保了与不同编码风格和编辑器的兼容性。

安装

composer安装

代码语言:javascript
代码运行次数:0
运行
复制
composer require topthink/think-template

在webman框架中使用,修改配置config/view.php

代码语言:javascript
代码运行次数:0
运行
复制
<?php
use support\view\ThinkPHP;

return [
    'handler' => ThinkPHP::class
];

控制器app/controller/UserController.php如下

代码语言:javascript
代码运行次数:0
运行
复制
<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        return view('user/hello', ['name' => '开源技术小栈']);
    }
}

视图文件app/view/user/hello.html如下

代码语言:javascript
代码运行次数:0
运行
复制
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>

更多文档参考:https://www.kancloud.cn/manual/think-template

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 核心特性
  • 标签类型
    • 普通标签
    • XML 标签
  • 安装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档