php模板引擎技术简单实现
网络编程 2021-07-05 09:10www.168986.cn编程入门
这篇文章主要为大家详细介绍了php模板引擎技术简单实现,感兴趣的小伙伴们可以参考一下
用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化
tpl.class.php主要解析
assign 方法实现
/ 模板赋值操作 @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值 @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null / public function assign($tpl_var,$tpl_value=null){ if(is_array($tpl_var) && count($tpl_var) > 0){ foreach ($tpl_var as $k => $v) { $this->tpl_vars[$k] = $v; } }elseif($tpl_var){ $this->tpl_vars[$tpl_var] = $tpl_value; } }
fetch 方法实现
/ 生成编译文件 @param string $tplFile 模板路径 @param string $File 编译路径 @return string / private function fetch($tplFile,$File){ //判断编译文件是否需要重新生成(编译文件是否存在或者模板文件修改时间大于编译文件的修改时间) if(!file_exists($File) || filemtime($tplFile) > filemtime($File)){ //编译,此处也可以使用ob_start()进行静态化 $content = $this->tplReplace(file_get_contents($tplFile)); file_put_contents($File, $content); } }
简单编译方法按照规则进行正则替换
/ 编译文件 @param string $content 待编译的内容 @return string / private function tplReplace($content){ //转义左右定界符 正则表达式字符 $left = preg_quote($this->left_delimiter,'/'); $right = preg_quote($this->right_delimiter,'/'); //简单模拟编译 变量 $pattern = array( //例如{$test} '/'.$left.'\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff])'.$right.'/i' ); $replace = array( '<?php echo $this->tpl_vars[\'${1}\']; ?>' ); //正则处理 return preg_replace($pattern, $replace, $content); }
display = fetch+echo
/ 输出内容 @param string $fileName 模板文件名 / public function display($fileName){ //模板路径 $tplFile = $this->template_dir.'/'.$fileName; //判断模板是否存在 if(!file_exists($tplFile)){ $this->errorMessage = '模板文件不存在'; return false; } //编译后的文件 $File = $this->pile_dir.'/'.md5($fileName).'.php'; $this->fetch($tplFile,$File); include $File; }
其他属性
//模板文件存放位置 private $template_dir = 'templates'; //编译文件存放位置 private $pile_dir = 'piles'; //左定界符 private $left_delimiter = '{'; //右定界符 private $right_delimiter = '}'; //内部临时变量,存储用户赋值 private $tpl_vars = array(); //错误信息 private $errorMessage = ''; / 修改类属性的值 @param array $configs 需要修改的相关属性及值 @return bool / public function setConfigs(array $configs){ if(count($configs) > 0){ foreach ($configs as $k => $v) { if(isset($this->$k)) $this->$k = $v; } return true; } return false; }
测试
模板文件 testTpl.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test_tpl_demo</title> </head> <body> {$name}:{$age}:{$message} </body> </html> 运行文件 test_tpl.php <?php require 'Tpl.class.php'; $tpl = new Tpl(); $tplarr = array( 'name'=>'waited', 'age'=>'100' ); $tpl->assign($tplarr); $tpl->assign('message','this is a demo'); $tpl->display('testTpl.html'); ?>
输出waited:100:this is a demo
生成编译文件972fa4d270e295005c36c1dbc7e6a56c.php
以上就是本文的全部内容,希望对大家的学习有所帮助。
上一篇:php实现图片上传并进行替换操作
下一篇:9个比较实用的php代码片段
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程