如何用PHP来编写自己的模板引擎
来源:互联网 发布:闲鱼怎么做淘宝链接 编辑:程序博客网 时间:2024/05/03 00:05
本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用。 PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并且减少集成时造成的额外工作量,模板引擎可以做到对Html页面中的变量、流程逻辑等内容用真实内容进行替换、并有缓存功能,减少每次解析的时间,说白了,模板引擎就是利用字符串替换来将模板用数据转换为真正要展示给用户的内容。 1. 原始的编写方法:内容和页面结合在一起。
2. 改进的方法:分离
hello.htm:
hello.php:
3. 一个简单的模板引擎
模板引擎
模板
4. 需要扩展的功能
流程逻辑替换
缓存
性能
解决以上问题就可以是一个真正的模板引擎,以后的文章中会介绍如何编写一个功能强大的模板引擎!
<?php echo “hello world!”;?>
2. 改进的方法:分离
hello.htm:
<html> <body> $var </body></html>
hello.php:
<?php$filename="./hello.htm"; $fp=fopen($filename,'r');$filecontent=fread($fp,filesize($filename));fclose($fp); //用变量进行替换$realcontent=str_replace("\$var","hello world!",$filecontent);//显示echo $realcontent;?>这样,美工就可以针对html文件进行排版编辑,程序员则可以关注与代码实现。
3. 一个简单的模板引擎
模板引擎
<?php class templater {var $left_limiter="<\?="; //变量前界定符var $right_limiter="=>"; //变量后界定符 var $assign_vars=array(); //存储变量值的数组对象 var $searchlevel=2; //遍历深度 //将变量赋值给模板引擎 function assign($varnames, $varvalues){ $arrvarname=explode(';',$varnames); //get variable name array //get variable value array if(count($arrvarname)<=1) //can support ";" in value $arrvarvalue=array($varvalues); else //can not has ";" in variable name or variable value $arrvarvalue=explode(';',$varvalues); //add to intenal variable array for($i=0;$i<count($arrvarname);$i++) { $this->assign_vars[$arrvarname[$i]]=$arrvarvalue[$i]; } } //根据变量名、变量值、模板内容、界定符对内容中的变量用实际值进行替换function parsevariable($content, $varname, $varvalue,$left_limiter='',$right_limiter=''){//get limiterif(empty($left_limiter))$left_limiter=$this->left_limiter;if(empty($right_limiter))$right_limiter=$this->right_limiter; foreach(array(preg_replace("/['\"]/", "'", $varname), preg_replace("/['\"]/", "\"", $varname)) as $tempvarname){$content=preg_replace( "/".$left_limiter.".*[$]".$tempvarname.".*".$right_limiter."/",$varvalue,$content); } return $content; } //返回替换后的内容function get($templatefile){ global $template,$defaulttemplate, $searchlevel;//get template file contentif(file_exists($templatefile)) //if not exist,use default template$filecontent=@file_get_contents($templatefile); else$filecontent=file_get_contents(str_replace('/'.$template.'/','/'.$defaulttemplate.'/',$templatefile)); //replace every variable with valuefor($i=0; $i<$this->searchlevel; $i++){foreach ($this->assign_vars as $varname=>$varvalue) { //convert variable with valueif(strpos($filecontent,$varname)) {$filecontent=$this->parsevariable($filecontent, $varname, $varvalue); }}}$to = "bak".$templatefile;file_put_contents($to,$filecontent);return $to;} } //实际的用法 $objtemplate=new templater; //创建模板引擎对象 $objtemplate->assign('var', "hello world!"); //变量赋值 include $objtemplate->get('hello.htm'); //显示内容?>
模板
hello.htm<html> <body> <?= $var => </body></html>
4. 需要扩展的功能
流程逻辑替换
缓存
性能
解决以上问题就可以是一个真正的模板引擎,以后的文章中会介绍如何编写一个功能强大的模板引擎!
0 0
- 如何用PHP来编写自己的模板引擎
- 如何用PHP来编写自己的模板引擎
- 如何用PHP调用自己编写的COM组件?
- 如何用 Robotframework 来编写优秀的测试用例
- 如何用Delphi编写自己的可视化控件
- 如何用Delphi编写自己的可视化控件
- 如何用Delphi编写自己的可视化控件
- [转]——如何用Java编写自己的库
- 如何用Delphi编写自己的可视化控件
- 如何用Delphi编写自己的可视化控件
- 如何用自己的 appender 来扩展 log4j 框架
- 学习如何用自己的 appender 来扩展 log4j 框架
- 如何用C++来建立自己的垃圾回收机制?!
- 学习如何用自己的 appender 来扩展 log4j 框架
- php 编写一个简单的模板引擎
- 一个自己写的PHP模板引擎
- 如何用C语言编写PHP扩展的详解
- 如何用PHP来操作XML的内容
- Android:如何在ScrollView中嵌套ListView
- servlet生命周期
- Xcode 5 的一个 Bug:修改 TableView的 content 导致崩溃
- 技术积累
- mysql 连接其他表更新字段语法
- 如何用PHP来编写自己的模板引擎
- Zigbee学习之创建自己的简单应用
- VS2010编译错误: fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏解决方法
- JAVASE_20_#java高级IO_File对象和IO包中的其他类
- 区分const char*, char const*, char*const
- unity开发 --------- c# 基本语法 008
- 哈佛为什么群星闪耀?
- 添加dom4j包
- 2:destroy 方法:摧毁 销毁