哪个网站做非洲的生意,网站定制建设哪里好,个体户核名查询系统,区块链开发技术PHP – 关于模板的原理和解析将PHP代码和静态HTML代码进行分离#xff0c;使代码的可读性和维护性得到显著提高。使用模板引擎#xff1a;我们所说的模板是web模板#xff0c;是主要由HTML标记组成的语言来编写的语言#xff0c;但也有如何表示包含动态生成内容的方式(解析…PHP – 关于模板的原理和解析将PHP代码和静态HTML代码进行分离使代码的可读性和维护性得到显著提高。使用模板引擎我们所说的模板是web模板是主要由HTML标记组成的语言来编写的语言但也有如何表示包含动态生成内容的方式(解析标签)。模板引擎是一种软件库允许我们从模板生成HTML代码并制定要包含的动态内容。模板引擎的特点1、 鼓励分离让各个系统的可读性和维护性得到提高。2、 促进分工使得程序员和美工去专心处理自己的设计3、 比PHP更容易解析编译文件和缓存文件加载更快占资源更少。4、 增加安全性可限制模板设计师进行不安全的操作避免误删误访问等。解析类//模板解析类class Parser{//创建一个字段保存模板文件里的内容private $_tpl;//构造方法用于接收模板文件public function __construct($_tplFile){if (!$this-_tpl file_get_contents($_tplFile)){exit(模板文件读取错误!);}}//解析普通变量private function parVar(){// preg_match() 执行一个正则表达式匹配 如果第二个参数中包含第一个参数则返回值为1// preg_replace() 执行一个正则表达式的搜索和替换 参数1要被替换的内容 参数2被替换成的内容 参数3包含替换内容的变量// 正则表达式/\{\$([\w])\}/ 表示匹配{$ } $符后可以为 0-9 a-z A-Z 的任何值。 即等价为定义的变量$_patten /\{\$([\w])\}/;if (preg_match($_patten,$this-_tpl)){$this-_tpl preg_replace($_patten,?php echo \$this-_vars[$1];?,$this-_tpl);}}//解析if语句private function parIf(){//正则表达式 \s 匹配一个或多个空白 \w 匹配a-z0-9A-Z和下划线的字符串$_pattenIf /\{if\s\$([\w])\}/;$_pattenEndIf /\{\/if\}/;$_pattenElse /\{else\}/;if (preg_match($_pattenIf,$this-_tpl)){if (preg_match($_pattenEndIf,$this-_tpl)){$this-_tpl preg_replace($_pattenIf,?php if (\$this-_vars[$1]){ ?,$this-_tpl);$this-_tpl preg_replace($_pattenEndIf,?php } ?,$this-_tpl);if (preg_match($_pattenElse,$this-_tpl)){$this-_tpl preg_replace($_pattenElse,?php }else{ ?,$this-_tpl);}}else{exit(if语句没有关闭);}}}//解析include语句private function parInclude(){$_patten /\{include\sfile\([\w\.\-])\\}/;// preg_match()的第三个参数 将第一个参数和其分组文件以数组的形式表达 [0]{include filetest.php} [1]test.phpif (preg_match($_patten,$this-_tpl,$_file)){if (!file_exists($_file[1]) || empty($_file)){exit(包含文件出错);}$this-_tpl preg_replace($_patten,?php include $1; ?,$this-_tpl);}}//解析PHP代码注释private function parCommon(){$_patten /\{#\}(.*)\{#\}/;// 正则表达式 (.* )表示任何内容if (preg_match($_patten,$this-_tpl)){$this-_tpl preg_replace($_patten,?php /* $1 */ ?,$this-_tpl);}}//对外共方法public function compile($_parFile){//解析模板内容$this-parVar();$this-parIf();$this-parCommon();$this-parInclude();//生成编译文件// file_put_contents() 将一个字符串写入文件// file_get_contents() 将整个文件读入一个字符串if (!file_put_contents($_parFile,$this-_tpl)){exit(编译文件生成出错);}}}模板引擎的整个过程1. 当浏览器请求index.php文件时实例化模板类对象$_tpl new Templates();2. 当template实例化的时候生成两个数组一个用来存放模板变量另一个存放系统变量通过构造方法判断文件夹是否存在同时通过XML文件将系统变量数组初始化3. 通过模板类template的注入方法assign()将对应模板index.tpl中变量的index.php内容注入到模板类的私有变量完成初始化4. 模板类template类显示方法display()通过实例化解析parser将取到的注入变量通过解析类进行解析(即替换)5. 解析(替换)后将文件写入PHP、HTML混全文件6. 通过template类的显示方法将文件输出缓存1. 第一次执行显示方法时将会把PHP、HTML混合文件生成纯静态的缓存文件2. 调用缓存文件显示页面3. 当浏览器再次调用显示方法时首先根据各文件的最后修改时间判断是否重新生成缓存文件或直接调用已存在的缓存文件重点通过正则表达式进行字符串的替换本文参考