php实现Smarty模板引擎原理
2017-07-28
后端
一、什么是Smarty模板引擎:
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。(来自百度百科)
自己的理解是:
第一,有利于把前端开发与后台开发工作分离,利于分工合作;
第二,其缓存机制,有利于加快网站的访问速度;
第三,模板标签还可以一次编写,到处调用,便利和简洁性好;
二、下面就一起开发迷你版模板引擎吧
(1)首先先把已经做好的模板引擎给大家看一看,先使用,再开发
① 迷你版Smarty模板引擎目录结构如下:
源代码里面有很详细的说明,请看下面
① 要开发一个模板引擎,最主要的有两个类,分别是模板引擎入口类和模板解析类。
A.首先创建MiniSmarty目录,然后新建一个文件名为MiniSmarty.class.php
其代码如下:
B.然后再新建一个MiniSmarty模板引擎解析器类文件:MiniSmarty_Compile.class.php
其代码如下:
C.最后,还必须新建几个目录,分别是模板文件目录templates、编译文件目录 template_c、缓存文件目录cache。
如果你(ˇˍˇ) 想~一次性成功,就必须创建这几个目录,缺一不可。否则就会报错,然后要求你手动创建。
D.来试试看吧,编写demo.php,测试一下自定义的迷你版MiniSmarty模板引擎吧!
demo.php代码如下:
测试前,请先看一下template、template_c 以及cache目录各自的状态,请看下图:
E:打开浏览器,输入http://localhost/MiniSmarty/demo.php,即可看到一下效果:
测试后,请再次看一下各目录的状态:
在template_c目录和cache目录下都分别多了一个xxxx.tpl.php和xxx.tpl.html文件,为什么呢?
答:这就是模板引擎非常重要的一个作用,编译文件并生成静态文件。对于如何实现的,这里不做解析,源码已经给出,看看就懂。
---->至此表示自己开发的一个迷你版Smarty模板引擎成功!*(^v^)/*
再次测试一下缓存功能是否生效了,首先修改demo.php中的代码,改动如下:
改动过后,记得保存,然后再次刷新页面,看出现什么状况了?
结果是:没有任何变化!这就正常了否则缓存功能没有实现。
???为什么没有任何变化呢
答:原因是我们在demo.php中开启了缓存功能
请看代码。下面这段代码是MiniSmarty.class.php里面的,下面就是根据你是否开启缓存,决定是加载缓存文件还是编译文件。因为这里开启了,所以会直接加载缓存文件,所以就算你修改了原来的模板,依然没变化。
如果我在demo.php中把缓存功能关了呢,结果会如何?
即改动如下:
此时,当你再次刷新页面的时候,你会看到如下效果:
此时,作者一栏改变了,这说明了模板引擎此时并没有去加载缓存文件,而是直接加载了编译文件。所以会出现该效果。上面的代码也说明了这一点。
其他细节在源码中都有较详细的注释,在这里就不多说了,说一下其原理。
★ MiniSmarty模板引擎原理:(非常重要)
其原理也比较简单
① 首先模板引擎会加载模板文件templates/demo.tpl,然后调用模板编译类对其进行编译解析(说白了就是变量替换或者标签替换),编译后就会生成编译文件xxxx.tpl.php;
②
然后判断缓存是否开启,来决定是否生成缓存文件。其生成过程是:直接把xxx.tpl.php编译文件加载进来,然后再从缓冲区取出所有内容,清空缓冲区,把内容写入到缓存文件中xxx.tpl.html文件。
③
模板文件demo.tpl是一个同时具有html和引擎标签的复合文件,编译文件xxx.tpl.php是把引擎标签替换成php代码,是具有php和html标签的复合文件,缓存文件xxx.tpl.html文件就是一个纯html的静态文件;
至此,迷你版MiniSmarty模板引擎开发完成!
其中,如果还有其他不好的地方,希望各位指出!谢谢。




把 $author = 'suhua'; 修改为 $author = 'xiwang';

//缓存开关 $minismarty->caching = true;
//缓存开关 $minismarty->caching = false; //关闭缓存功能

