本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用。

PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并且减少集成时造成的

额外工作量,模板引擎可以做到对Html页面中的变量、流程逻辑等内容用真实内容进行替换、并有缓存功能,减少每次解析的时间,说白了,模板引擎就是利用字符串替换来将模板用数据转换为真正要展示给用户的内容。

1.原始的编写方法

echo “hello world!”;

?>

内容和页面结合在一起。

2.改进的方法

Html:

$var

PHP:

//读取文件内容

$filecontent;

$fp=fopen($filename,'r');

$filecontent=fread($fp,filesize($filename));

fclose($fp);

//用变量进行替换

$realcontent=str_replace(“$var”,”hello world!”,$filecontent);

//显示

echo $realcontent;

这样,美工就可以针对html文件进行排版编辑,程序员则可以关注与代码实现。

3.一个简单的模板引擎

//变量前界定符

var $left_limiter='=';

//变量后界定符

var $right_limiter='?>';

//存储变量值的数组对象

var $assign_vars=array();

//遍历深度

var $searchlevel=2;

class templater

{

//将变量赋值给模板引擎

function assign($varnames,$varvalues)

{

//get variable name array

$arrvarname=explode(';',$varnames);

//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

{

$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;

//get variable name

$varname=$this->wrapreskeyword($varname);

//parse variable value

foreach(array(preg_replace("/['\"]/","'",$varname),preg_replace("/['\"]/","\"",$varname)) as $tempvarname)

$content=preg_replace("/".$this->wrapreskeyword($left_limiter)."\s*[$]".$tempvarname."\s*".$this->wrapreskeyword($right_limiter)."/i",$varvalue, $content);

//return result

return $content;

}

//返回替换后的内容

function get($templatefile)

{

global $template,$defaulttemplate;

//define variable

$filecontent="";

//get template file content

if(file_exists($templatefile))   //if not exist,use default template

$filecontent=readfilecontent($templatefile);

else

$filecontent=readfilecontent(str_replace('/'.$template.'/','/'.$defaulttemplate.'/',$templatefile));

//replace every variable with value

for($i=0;$isearchlevel;$i++)

{

foreach ($this->assign_vars as $varname=>$varvalue)

{

//convert variable with value

if(strpos($filecontent,$varname))

$filecontent=$this->parsevariable($filecontent,$varname,$varvalue);

}

}

//return content

return $filecontent;

}

}

//实际的用法

$objtemplate=new templater; //创建模板引擎对象

//变量赋值

$objtemplate->assign('var',”hello world!”);

//显示内容

echo $objtemplate->get("test.html");

4.需要扩展的功能

流程逻辑替换

缓存

性能

解决以上问题就可以是一个真正的模板引擎,以后的文章中会介绍如何编写一个功能强大的模板引擎!

php开发自己的模板引擎,如何用PHP来编写自己的模板引擎 - PHP|模板引擎 - 软件工程|架构设计|网站设计|艺术营销 - 河洛炎黄 - 魏文侯...相关推荐

  1. SAP UI5 应用开发教程之八十五 - 如何用 OPA5 编写测试用例来测试用户输入文本的功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  2. twig模板引擎详解(下集:开发者篇)【twig模板引擎中文使用教程】

    上集重点介绍了twig模板的使用,供模板设计者阅读,下集供php开发者阅读,讲解如何调用和扩展twig,这一篇安装和采用版本将衔接上集内容. Twig_Environment: 该类的实例是twig模 ...

  3. HTML5响应式手机模板:电商网站设计——歪秀商城手机端开发静态页面HTML+CSS+JavaScript 手机模板wap 手机网站模板 企业手机网站模板...

    HTML5响应式手机模板:电商网站设计--歪秀商城手机端开发静态页面HTML+CSS+JavaScript 手机模板wap 手机网站模板 企业手机网站模板 手机网站模板 手机模板 响应式手机网站 ht ...

  4. web网页设计与开发:个人明星介绍主题网站设计——张艺兴(10页) HTML+CSS+JavaScript 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 网页设计作业...

    常见网页设计作业题材有 ​​个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游 ...

  5. HTML5响应式手机模板:电商网站设计——歪秀商城手机端开发静态页面HTML+CSS+JavaScript 手机模板wap 手机网站模板 企业手机网站模板

    HTML5响应式手机模板:电商网站设计--歪秀商城手机端开发静态页面HTML+CSS+JavaScript 手机模板wap 手机网站模板 企业手机网站模板 手机网站模板 手机模板 响应式手机网站 ht ...

  6. html大学生网站开发实践作业:旅游网站设计——联途旅游网(39页) HTML+CSS+JavaSc 旅游网页html 开心旅游网html 旅游网前端框架HTML模板...

    HTML5期末大作业:旅游网站设计--联途旅游网(39页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材 ...

  7. web网页设计与开发:旅游酒店网站设计——红色大气的度假酒店预订网站html模板(5页) HTML+CSS+JavaScript

    HTML5期末大作业:旅游酒店网站设计--红色大气的度假酒店预订网站html模板(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页 ...

  8. binarytreenode”使用 类 模板 需要 模板 参数列表_0基础掌握Django框架(7)Django模板介绍...

    为了更好的学习效果,请搭配视频教程一起学习: [免费]Python全栈开发系列教程 - 网易云课堂​study.163.com 模板 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很 ...

  9. 网络推广外包中目标用户习惯对企业网站设计与开发有重要影响

    众所周知,在企业网站设计与开发过程中,左右企业网站开发设计走向的最主要的就是用户,以用户为核心.立足于用户角度.关注用户浏览习惯等等,这些内容的了解对于目标用户群体进一步接受企业产品或服务也更容易,在 ...

最新文章

  1. 怎么写shell脚本才能不耍流氓?
  2. VMware虚拟机安装Centos7
  3. python大神-6年Python大神总结10个开发技巧,80%的人都不会
  4. sap 获取计划订单bapi_sapbapi的清单.doc
  5. hexo-Fluid主题使用手册
  6. java gc日志乱码_gc原理以及gc日志剖析
  7. 开源的代理服务器HAProxy 易遭严重的 HTTP 请求走私攻击
  8. NLPIR的语义分析系统
  9. 017指北与游移方位惯导系统知识梳理
  10. 自适应滤波器(Adaptive Filter)(1)--简介
  11. ubuntu安装github 3D渲染库dirt
  12. 原生js实现动态数据表格
  13. Python、MATLAB股票投资:ARIMA模型最优的选股、投资组合方案与预测
  14. 解决Windows 7播放网页视频没有声音的问题
  15. Toad 使用快速入门(转贴)
  16. THE WAVELET THEORY: A MATHEMATICAL APPROACH
  17. WEB入门三 CSS样式表基础
  18. Tableau 消费客户分析(二)分群规模和消费
  19. Python:哔哩哔哩B站视频下载,我终于对小破站下手了
  20. “九”答不可 | ​量子力学在现实世界都有哪些应用?

热门文章

  1. [转]一个男人该有的气质 (马云原话),二十几岁女孩该有的内涵(杨澜)。
  2. CVE-2022-33891:Apache Spark 命令注入漏洞通告
  3. 一篇文章教会你利用Python网络爬虫实现豆瓣电影采集
  4. 北京市家庭居室装饰装修工程施工合同
  5. 嵌入式面试:vivo 2020春 校
  6. 模式识别 - 多视角学习 (Multi-View Learning) 简介
  7. 无法更新运行时文件夹共享状态_这个系统不更新,你的iPad等于废了
  8. [环境配置][转载]ubuntu software 软件下载失败 unsupport proxy configured
  9. Vue项目在ie浏览器报语法错误
  10. C语言培训宣传语,C语言培训—11.20