/*

作者: 牛哄哄

Q Q: 455703030

*/

function template($template,$cacheFile,$set)

{

is_readable($template) || exit('模板文件不存在!');

filemtime($template) > @filemtime($cacheFile) && parse_template($template,$cacheFile);

$inTemplate = true;

is_readable($cacheFile) ? include $cacheFile : exit('无法读取缓存,缓存路径可能有误!');

}

function parse_template($template,$cacheFile='')

{

$content = file_get_contents($template);

$content = preg_replace('/\{\*([^\{\}]*)\*\}/','',$content);

$content = preg_replace('/\$([A-Za-z0-9_]+)/','$set[\'\\1\']',$content);

$content = preg_replace('/\$\[([A-Za-z0-9_]+)\]/','$\\1',$content);

$content = preg_replace('/\{\$([A-Za-z0-9_\[\]\'"]+)\}/',' echo $\\1; ?>',$content);

$content = preg_replace('/\{include\(([^\{\}]+)\)\}/',' include \\1; ?>',$content);

$content = preg_replace('/\{echofile\(([^\{\}]+)\)\}/',' echo file_get_contents(\\1); ?>',$content);

$content = preg_replace('/\{code\(([^\{\}]+)\)\}/',' \\1; ?>',$content);

$content = preg_replace('/\{if\(([^\{\}]+)\)\}/',' if (\\1) { ?>',$content);

$content = preg_replace('/\{elseif\(([^\{\}]+)\)\}/',' } elseif(\\1) { ?>',$content);

$content = preg_replace('/\{while\(([^\{\}]+)\)\}/',' while (\\1) { ?>',$content);

$content = preg_replace('/\{foreach\(([^\{\}]+)\)\}/',' foreach (\\1) { ?>',$content);

$content = str_replace(array('{else}','{/if}','{/while}','{/foreach}'),array(' }else{ ?>',' } ?>',' } ?>',' } ?>'),$content);

if (preg_match_all('/\{template\(([^\{\}]+)\)\}/',$content,$tplName))

{

foreach ($tplName[1] as $value) $tplContent[] = parse_template(eval('return '.$value.';'));

$content = str_replace($tplName[0],$tplContent,$content);

}

if ('' == $cacheFile) return $content;

@file_put_contents($cacheFile,' true===$inTemplate || exit(\'非法访问!\'); ?>'.$content);

}

1,修复一个因为疏忽造成的小BUG,编译之后的代码少 了一个{符号,呵呵

2,更改模板嵌套的编译模式,现在这种模式使用更简单方便,也更符合大家的习惯

3,增加了一个新的功能,其实本来提供的功能,也可以实现此功能,但是毕竟不专业,用起来不方便。此功能用来直接输出一个静态的文件,我曾经做过测试,这样直接输出,效率要比include高的多的多

此模板函数提供的标签及功能:

1,添加注释

{* *}

2,输出变量

{$i} //需要对变量进行格式化,可以使用{code()}标签来执行一个函数进行格式化输出

3,包含一个动态文件

{include()}

4,包含一个静态文件

{echofile()}

5,嵌套一个模板

{template()}

6,判断,分支

{if()} {elseif()} {else} {/if}

7,循环

{while()} {/while}

{foreach()} {/foreach}

8,执行一段PHP代码,包括赋值,函数等等等等

{code()}

有了这些东西,基本上就没有什么工作完成不了了。

内附比较详细的使用说明

php 模板 自己,php自己写了一个模板相关推荐

  1. 类模板里面的函数写在类模板里面和写在类模板的外面,且在1个.cpp文件中

    和类一样,类模板里面声明的函数,其函数体写在类里面和外面都行,但是有一点需要注意:1.用友元函数重载<< 或 >>运算符,函数声明写在类模板里面,函数实现写在类模板外面,要在函 ...

  2. c语言程序的模板,C++中模板与用C语言中实现模板

    1.模板的概念 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同.正确的调用重载函数.例如,为求两个数的最大值,我们定义MAX()函数需要 ...

  3. c++模板类(一)理解编译器的编译模板过程

    如何组织编写模板程序 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:"模板的使用是容易的,但组织编写却不容易".看看我们几乎每天都能遇到的模板类吧,如STL, ATL, ...

  4. 【无标题】类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n // 类定义\n};\n\ntemplate\u003Ctypen

    类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n    // 类定义\n};\n\ntemplate\u003Ctypenam ...

  5. 一个自己写的PHP模板引擎

    这是一个自己写的编译型的模板引擎(不包括缓存部分)贴上代码.有问题可以随时跟帖. 单文件版:JTemplate.class.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  6. xpath里面if判断一个值不为空_现代C++之模板元编程(今天写个If与While)

    现代C++之模板元编程(今天写个If与While) 0.导语 今天就放轻松,有可能代码写的看的很晦涩,自己多敲几遍即可,下面来进入正文,如何使用模板元编程实现IF与WHILE. 1.IF实现 我们想要 ...

  7. 自己写php模板引擎,如何用php编写一个简单的模板引擎(附代码)

    php web开发中广泛采取mvc的设计模式,controller传递给view层的数据,必须通过模板引擎才能解析出来.实现一个简单的仅仅包含if,foreach标签,解析$foo变量的模板引擎. 编 ...

  8. 最短路径 自己写的一个很简单的模板 dijkstra算法

    根据图论课本上的一个图自己写的一个最短路径的dijkstra算法 #include<stdio.h> const int m=999999999; int main() {int tu[8 ...

  9. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码

    分享下自己写的一个微信小程序请求远程数据加载到页面的代码 1  思路整理 就是页面加载完毕的时候  请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码  我是改的 onload ...

最新文章

  1. 【转】G40-70、G50-70联想小新笔记本SR1000随机Linux改Windows 7系统操作指导
  2. java合并整形_java中2个int合并成一个long
  3. 机器视觉:Asymmetry Problem in Computer Vision
  4. 虚拟机备份oracle异常,客户端连接虚拟机Oracle服务器异常
  5. jsp中c:forEach的应用
  6. 计算机一级电子表格插入表格,计算机一级电子表格
  7. 大数据-HDFS文件系统是什么
  8. 罗永浩将重返高科技行业创业 将涉足AR/VR/MR领域
  9. 排除IIS特殊管理困惑
  10. 250个jquery 插件
  11. 阿里巴巴2020首发136道Java高级岗面试题(含答案)
  12. 算法笔记-二分查找和二分答案
  13. AXURE9最全的WEB设计元件库(分享版).rplib
  14. Protel 格式网表转换 Allegro 格式网表的 Skill 程序
  15. 阿尼亚二次元动漫鼠标指针最新教程+素材打包
  16. MSM8953_Linux-Android软件手册资料
  17. sfp寄存器_一种基于Linux系统读写光模块寄存器的方法与流程
  18. 阿兹尔海默症生物标志物(姑且叫标志物)的一些总结
  19. electron +vue自定义点击最大化、最小化和关闭窗口事件功能
  20. jzoj6495 死星 (竞赛图五元环)

热门文章

  1. Azure PaaS服务密钥的安全性
  2. Opensturt和Struct区别
  3. linux网络编程之posix线程(二)
  4. rapidxml对unicode的支持
  5. VS code报错:Launch options string provided by the project system id invalid.
  6. this指向_js中关于this指向的训练题
  7. MeeGo、Ubuntu Touch、Sailfish、Tizen系统历史关系
  8. Mac自带嗅探器和Wireshake抓包(三)
  9. 蓝牙avrcp协议源码分析
  10. python之collections