如何用PHP来编写自己的模板引擎
2014-03-04 11:18
344 查看
本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给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 limiter if(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 content if(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 value for($i=0; $i<$this->searchlevel; $i++) { foreach ($this->assign_vars as $varname=>$varvalue) { //convert variable with value if(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. 需要扩展的功能
流程逻辑替换
缓存
性能
解决以上问题就可以是一个真正的模板引擎,以后的文章中会介绍如何编写一个功能强大的模板引擎!
相关文章推荐
- 通过CuteFTP查看远程ftp服务器的隐藏文件(如.htaccess)
- [NSDate distantPast]使用
- PHP cURL的详细使用手册
- 生成简单的php验证码
- PHP-----类与对象,成员方法,成员属性,构造方法,析构方法
- php获取目标函数执行时间示例
- PHP单例模式示例代码
- Windows下搭建PHP开发环境
- [转]系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- Thinkphp 去除bom头 解决模版空输出问题
- _file__与PHP链接access数据库操作指南
- php循环创建目录
- MSTP负载均衡配置示例
- php 链接mysql
- PHP数组实际占用内存大小的分析
- php如何判断是否为json数据(格式)
- windows2003+PHP+XCACHE完整配置教程
- php文本计数器,超简单!
- 【php学习】超长隐藏
- php输出控制