php模板引擎的原理与简单实例
2018-03-13 09:14
441 查看
模板引擎其实就是将一个带有自定义标签的字符串,通过相应的规则解析,返回php可以解析的字符串,这其中正则的运用是必不可少的,所以要有一定的正则基础。
总体思想,引入按规则写好的模板,传递给标签解析类(_HtmlTag)进行解析,再把解析好的字符串传递给php进行解析渲染输出
首先定义了一个_HtmlTag类:
先解析下render方法
在render方法中对传入的字符串$s,进行相应的替换渲染,用到了extends方法,import方法,''开头的各种过滤方法,后面会一一进行详解.
_extends方法
使用 个方法是为了判断是否有继承相应的模板文件,在子文件中用{extends 模板名},一般只要填写文件名,如index,系统会自动去构造完整的文件路径,一般在上一级目录,这个在realTpl()方法时会有详解
_import 方法
_import 方法是用来对{import 文件名}标签进行解析,默认也是上层目录,会把该文件的内容解析到当前标签位置,同时支持使用:函数名|参数1, 参数2,...的方式进行字符串的回调.这中的display方法后面会有详解
现在来看一个标签函数_loop,将标签{loop $data $k $v}或{loop $data $v}替换,实现模板循环,其中的parseAttr方法接下来将详解
parseAttr方法
该方法用来解析标签 的参数,返回的第一个参数是值形式字符串,第二个是键值数组,如{loop $data $k $v}返回$data $k $v 组成 的字符串和一个空数组,{if $k = $v}则返回空字符串和和数组[$k => $v];
_if 方法
将{if}{/if}标签解析成原生 的php,简单明了,不多解释
_else方法
将{else}解析成原生的php
_elseif方法
将{elseif}解析成原生的php
_for 方法
_while方法
_end方法
通过这个方法对其$this->string进行修改可以对变量进行如下标签定义:
{$val}{$arr[$key]}{$arr['key']}{:val()}{$arr.key}{$arr.$key}
_result方法,做最后处理,返回字符串,_end方法在上面已经解释过了
可以用此种形式对变量进行htmlspecialchars式的过滤spspecialchars函数后面会有介绍{:e $val}
_htmldecodeEcho方法
_defaultEcho方法
_xssEcho方法
_echo方法
_baseParse方法,这个对css和js的引入进行处理
_loadJs方法
_loadCss方法
上面两个函数都用到了各自的parseCss,和parseJs,让我们来看下
上面的_html类和他的方法对传入的字符串进行了标签到原生 Php的替换,可以传入相应的模板,也可以在其中自定义自己的过滤方法。
下面我们再来看一个template类:
定义这个类来对模板进行管理,这里会用到上面的_html类,基本定义如下,接下来会介绍其中的一些方法
getString方法
在之前 开启ob_start(),然后获取这之间的ob数据,试用于框架中
display方法
compiles方法, 在这里使用了sp_file_put_contentsb函数会在后面介绍
make_magic_func方法
注意
两个类的相应方法都 定义好了,这其中用到的函数sp_file_pu_contents($file, $data)
js压缩类: jsmin.class.php
链接:http://pan.baidu.com/s/1kUBx0X5 密码:y5jb
将这两个 类定义在一个文件中,使用进进行相应的配置
使用
文件准备
main.htm:
base.htm
im.htm
index.php
运行index.php查看结果
总体思想,引入按规则写好的模板,传递给标签解析类(_HtmlTag)进行解析,再把解析好的字符串传递给php进行解析渲染输出
首先定义了一个_HtmlTag类:
在render方法中对传入的字符串$s,进行相应的替换渲染,用到了extends方法,import方法,''开头的各种过滤方法,后面会一一进行详解.
使用 个方法是为了判断是否有继承相应的模板文件,在子文件中用{extends 模板名},一般只要填写文件名,如index,系统会自动去构造完整的文件路径,一般在上一级目录,这个在realTpl()方法时会有详解
_import 方法是用来对{import 文件名}标签进行解析,默认也是上层目录,会把该文件的内容解析到当前标签位置,同时支持使用:函数名|参数1, 参数2,...的方式进行字符串的回调.这中的display方法后面会有详解
该方法用来解析标签 的参数,返回的第一个参数是值形式字符串,第二个是键值数组,如{loop $data $k $v}返回$data $k $v 组成 的字符串和一个空数组,{if $k = $v}则返回空字符串和和数组[$k => $v];
将{if}{/if}标签解析成原生 的php,简单明了,不多解释
将{else}解析成原生的php
将{elseif}解析成原生的php
_for 方法
_while方法
_end方法
通过这个方法对其$this->string进行修改可以对变量进行如下标签定义:
{$val}{$arr[$key]}{$arr['key']}{:val()}{$arr.key}{$arr.$key}
_result方法,做最后处理,返回字符串,_end方法在上面已经解释过了
下面再来介绍一下几个过滤的方法
_htmlencodeEcho方法可以用此种形式对变量进行htmlspecialchars式的过滤spspecialchars函数后面会有介绍{:e $val}
_htmldecodeEcho方法
_defaultEcho方法
_xssEcho方法
_echo方法
_baseParse方法,这个对css和js的引入进行处理
_loadJs方法
_loadCss方法
上面两个函数都用到了各自的parseCss,和parseJs,让我们来看下
上面的_html类和他的方法对传入的字符串进行了标签到原生 Php的替换,可以传入相应的模板,也可以在其中自定义自己的过滤方法。
下面我们再来看一个template类:
定义这个类来对模板进行管理,这里会用到上面的_html类,基本定义如下,接下来会介绍其中的一些方法
getString方法
在之前 开启ob_start(),然后获取这之间的ob数据,试用于框架中
display方法
compiles方法, 在这里使用了sp_file_put_contentsb函数会在后面介绍
make_magic_func方法
两个类的相应方法都 定义好了,这其中用到的函数sp_file_pu_contents($file, $data)
链接:http://pan.baidu.com/s/1kUBx0X5 密码:y5jb
将这两个 类定义在一个文件中,使用进进行相应的配置
文件准备
相关文章推荐
- php模板引擎的原理与简单实例
- php分页原理教程及简单实例
- PHP原生模板引擎 最简单的模板引擎
- PHP原生模板引擎 最简单的模板引擎
- php Smarty 模板简单实例
- PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究
- php简单的自定义模板引擎类。
- php分页原理教程及简单实例
- PHP模板引擎的原理与实践
- php 编写一个简单的模板引擎
- php图片加水印原理(超简单的实例代码)
- Wordpress解析系列之PHP编写hook钩子原理简单实例
- php实现简单视图模板(视图引擎)
- PHP实现简单的模板引擎功能示例
- PHP的分页原理和简单实例
- php图片加水印原理(超简单的实例代码)
- PHP简单模板实现实例
- 模板引擎的简单原理template
- PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究
- smarty简单模板变量输出方法[原创]_php实例_脚本之家