php模板引擎原理

模板引擎实现的原理

访问php文件, php文件会去加载模板引擎,通过模板引擎去加载模板然后替换模板里面的变量 然后生成一个编译文件

最后将该编译文件导入 访问的php文件中输出 第二次访问的时候 如果 缓存文件存在或者没有被改动则直接 导入缓存文件 输出

否则重新编译

自定义的一个模板引擎 mytpl.class.php

<?php

class mytpl{

//指定模板目录

private $template_dir;

//编译后的目录

private $compile_dir;

//读取模板中所有变量的数组

private $arr_var=array();

//构造方法

public function __construct($template_dir="./templates",$compile_dir="./templates_c")

{

$this->template_dir=rtrim($template_dir,"/")."/";

$this->compile_dir=rtrim($compile_dir,"/")."/";

}

//模板中变量分配调用的方法

public function assign($tpl_var,$value=null){

$this->arr_var[$tpl_var]=$value;

}

//调用模板显示

public function display($fileName){

$tplFile=$this->template_dir.$fileName;

if(!file_exists($tplFile)){

return false;

}

//定义编译合成的文件 加了前缀 和路径 和后缀名.php

$comFileName=$this->compile_dir."com_".$fileName.".php";

if(!file_exists($comFileName) || filemtime($comFileName)< filemtime($tplFile)){//如果缓存文件不存在则 编译 或者文件修改了也编译

$repContent=$this->tmp_replace(file_get_contents($tplFile));//得到模板文件 并替换占位符 并得到替换后的文件

file_put_contents($comFileName,$repContent);//将替换后的文件写入定义的缓存文件中

}

//包含编译后的文件

include $comFileName;

}

//替换模板中的占位符

private function tmp_replace($content){

$pattern=array(

‘/\<\!--\s*\$([a-zA-Z]*)\s*--\>/i‘

);

$replacement=array(

‘<?php echo $this->arr_var["${1}"]; ?>‘

);

$repContent=preg_replace($pattern,$replacement,$content);

return $repContent;

}

}

//使用该模板引擎

<?php

//导入模板引擎类

include"mytpl.class.php";

$title="this is title";

$content="this is content";

$tpl=new mytpl();

//分配变量

$tpl->assign("title",$title);

$tpl->assign("content",$content);

//指定处理的模板

$tpl->display("tpl.html");

?>

时间: 2024-12-18 14:46:33

php模板引擎原理的相关文章

JavaScript模板引擎原理,几行代码的事儿

JavaScript模板引擎原理,几行代码的事儿 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years old.'; 通过模板引擎函数把数据塞进去, var data = { "name": "Barret Lee", "age": "20" }; var result

smarty模板引擎原理解析

//php 控制器文件 <?php//引入模板引擎文件include("20130304.php");$smarty = new TinySmarty();$qq_numbers=array('a1'=>'12333','a2'=>'2222222','a3'=>'333333','a4'=>'3333333');$smarty->assign($qq_numbers);$smarty->assign('title','这是我的QQ号码');$

JavaScript模板引擎原理与用法

这篇文章主要介绍了JavaScript模板引擎原理与用法,结合实例形式详细分析了javascript模版引擎相关概念.原理.定义及使用方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下 一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years old.'; 通过模板引擎函数把数据塞进去, var data = { &q

js模板引擎原理,附自己写的简洁模板引擎

js处理DOM交互非常普遍,但DOM结构单纯用js字符串拼接简直难以维护,不方便理解和扩展. 下面展现了js模板引擎的实现原理: html中的模板 <script id="mytpl"> <div> 我的名字是:$name$ <br/> 今年$age$了! </div> </script> 因为script不会被浏览器解析和渲染,最大限度节省了浏览器资源,textarea标签同样可以达到效果.Template标签就是这样的目的

高性能JavaScript模板引擎原理解析

随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC 思想也开始流行起来.javascript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,近一年来在开源社区中更是百花齐放,在 Twitter.淘宝网.新浪微博.腾讯QQ空间.腾讯微博等大型网站中均能看到它们的身影. 本文将用最简单的示例代码描述现有的 javascript 模板引擎

tornado模板引擎原理

前言 老师问小明:已经a=1, 求a+1的值. 小明挠挠头,思考后回答:老师,a+1的结果是2. 以上是一个非常简单的例子,实际上就是一个模板编译过程. a=1,表示一个命名空间(namespace)中的一项,该命名空间中存在一个名称(name)为a,其值为1.在python里面,命名空间可以用数据结构字典来表示. a+1,实际上是一个非常简单的模板.这个模板里面有且只有一条规则a+1.本博文中所说的模板,实际上更类似一份空白的数学考卷.这份数学考卷中,有很多类似上面老师问小明的题目. 学生解决

Trimpath Template 及JS模板引擎原理

这个是一个很老的JS模板引擎.看了下源码,理解下模拟条件语句的替换原则.感觉有点复杂~ 简记之. 如果不涉及条件语句,可以直接在代码里构建模板,ajax请求回来的数据套用即可.最原始方式. Trimpath JavaScript 是个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎. 它有如下的特点: 1.采用标准的JavaScript编写,支持跨浏览器 2.模板语法类似于:FreeMarker,Velocity,S

模板引擎原理及underscore.js使用

为什么要使用模板引擎 DOM结构简单,完全可以使用DOM方法创建DOM树.$("<td></td").appendTo(); 当页面比较复杂的时候,下面的程序中红色部分来自JSON中的数据: <div class="feeds-item hasImg" id="item-702635"> <p class="feeds-item-pic"> <a href="http:

artTemplate模板引擎学习实战

在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javascript引擎.而javascript引擎的实质就是帮我们把带有JavaScript代码的伪THTML语句编译为HTML. 如果有不了解的朋友,可以前往这两篇文章: 淘宝购物车页面 PC端和移动端实战 淘宝购物车页面 智能搜索框Ajax异步加载数据 源码地址: GitHub:Uncle-Keith 回