PHP 模板引擎的原理
代码分层的思想
PHP 作为轻巧灵活的脚本语言,非常适合 Web 开发这种开发周期短、需求变化快、强调用户体验的需求和业务。PHP 开发早期,通常都是 PHP 代码与 HTML 混写,代码中充斥着数据库操作、逻辑判断、HTML 代码生成,甚至 JavaScript 代码等。当项目规模不大时,这种编程风格能够很快地完成需求。但是一旦项目规模扩大后,再加上前端逻辑越来越复杂,这种完全混写的方式必将带来代码可读性差和后期维护困难等问题。
于是,代码分层有两个要点:
- 实现数据生成和显示的分离
- 实现 PHP 代码和 HTML 代码的分离
一个简单的模板引擎骨架
- 模板引擎配置化
- 支持缓存
- 使模板文件进一步脱离 PHP 语法
基础类骨架
- 检查是否存在模板文件,如果不存在则退出
- 检查对应的模板是否已经被编译,如果未被编译,引入编译工具类,对其进行编译
- 读取编译后的文件
编译类骨架
编译类骨架较为简单,编译的过程实际上就是将字符串输出到某个文件中。
模板引擎的编译
- 实现变量标签
- 实现 foreach、if…else 标签
- 对 PHP 原生语法的支持
模板缓存机制
把模板编译后的 PHP 文件所执行的结果保存为 HTML 静态文件,在下一次请求到来时,直接给出 HTML 文件,而省去编译和执行的过程。
调试和缓存清理
- 路径。相对路径比较容易导致路径混乱,因此为了程序的健壮性,我们在模板中使用绝对路径来定位文件。
- 对于模板文件夹和缓存文件夹的处理是不同的。如果模板文件夹不存在,模板文件也就不存在,此时应该给出明确的错误提示;而当缓存文件夹不存在时,应该新建一个文件夹。
参考书籍: 《PHP 核心技术与最佳实践》