Smarty 自定义模板引擎

1.模板引擎原理
在这里插入图片描述
2.实现自己的模板引擎
(1).创建目录结构
在这里插入图片描述
编写index.php文件
在这里插入图片描述
(2).定义template类
首先定义三个属性,如下:
在这里插入图片描述
然后定义assign方法:
在这里插入图片描述
定义display方法如下:
在这里插入图片描述
测试,定义一个模板文件,如下:
在这里插入图片描述
输出结果:
在这里插入图片描述
本着单一职责的职责,每个类只负责完成一件事情。所以我们再行定义一个parse类,用于完成功能。
(3).定义parse类
Parse类的初步框架如下:
在这里插入图片描述
然后在template类的display方法中,实例化该对象,完成解析工作
在这里插入图片描述
要完成具体的解析工作,其实就是字符串的查找和替换。此时,我们需要用到正则表达式。
(4).正则表达式
http://deerchao.net/tutorials/regex/regex.htm
用一些特定的符号和语法,来对字符串进行匹配,一般是匹配某种格式。
元字符
在这里插入图片描述
数量词
在这里插入图片描述
匹配手机号:\d{11}
匹配qq号:\d{5,11}
匹配用户名:\w{6,16} \w+
对一些特殊的字符,需要转义,使用\就可以
{ {
\ \
/ /
$ $
反向引用
两个步骤:
A.捕获,将需要查找的内容放在小括号中, ()
B.引用,使用 \数字 的方式 \1表示第一个小括号,\2表示第二个小括号中的,以此类推,用的时候,需要对\进行转义 \\1 或 \\2
在php中如何来使用正则
在这里插入图片描述
使用的正则的时候,注意两个小的细节:
正则表达式应该放在//之间
使用单引号引用
(5).解析变量
编写parseVar方法如下:
在这里插入图片描述
重新访问页面
在这里插入图片描述
查看混编文件,如下:
在这里插入图片描述
(6).解析if语句
分配一个布尔值
在这里插入图片描述
在模板页面中编写如下:
在这里插入图片描述
代码如下:
在这里插入图片描述
在这里插入图片描述
访问,查看效果如下:
在这里插入图片描述
查看编译文件:
在这里插入图片描述
(7).解析foreach语句
在这里插入图片描述模板编写如下:
在这里插入图片描述
实现代码如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
查看一下编译文件
在这里插入图片描述
(8).对template类的完善
我们目前的程序,它是每次都编译了,肯定不对,需要进行判断,如果编译文件存在并且编译文件是有效的。(模板文件是否被修改,如果模板文件被修改,则需要重新编译)。
增加代码如下:
在这里插入图片描述
其中,判断文件是否被修改,可以通过修改时间来进行判断
在这里插入图片描述
正常情况下,先有模板文件,然后才会生成编译文件,filemtime(模板文件) < filemtime(编译文件)
如果模板文件被修改了,则会变成如下关系 filemtime(模板文件) > filemtime(编译文件)
(9).实现缓存
如何实现缓冲呢?
设置缓存目录,开启缓存
在这里插入图片描述
在index.php中,设置这个两个属性
在这里插入图片描述
具体的实现过程:
分成两条线来完成
第一次生成缓存的过程
后续的访问,如果有缓存,直接访问缓存即可
A.第一次生成缓存的过程
此处,需要使用ob缓存
在这里插入图片描述
首先,需要开启缓冲区
在这里插入图片描述
在开启缓存的情况下,生成缓存文件
在这里插入图片描述
再次访问,生成缓存文件
在这里插入图片描述
B.后续的访问,如果有缓存,直接访问缓存即可
第一个就应该判断缓存,
在这里插入图片描述
如此,我们的缓存就可以使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值