PHP从写简单模板引擎,供新手学习

php中文网
发布: 2016-06-13 12:12:19
原创
1008人浏览过

PHP自写简单模板引擎,供新手学习

今天要写点小东西,突然想到要用模板引擎。就“随手”写了一个,发上来供新手学习。搞了这么久php,想想也真是感慨,当年研究了几天的东西现在一两个小时就弄完了,当年一起完耍的女神现在已经不知所踪了。。。咳咳,下面是代码:

<?php/****************&#160;* @author: 一曲忧伤&#160;* @email: [email&#160;protected]&#160;* @discription: 简单模板引擎&#160;*/define('INVIEW', true);class view {&#160; &#160; var $tpl_dir = 'template';&#160; &#160; var $cache_dir = 'cache';&#160; &#160; var $tpl_ext = '.html';&#160; &#160; var $var_left = '{';&#160; &#160; var $var_right = '}';&#160; &#160; function __construct($config=array()) {&#160; &#160; &#160; &#160; extract($config);&#160; &#160; &#160; &#160; if(isset($tpl_dir))$this->tpl_dir = $tpl_dir;&#160; &#160; &#160; &#160; if(isset($cache_dir))$this->cache_dir = $cache_dir;&#160; &#160; &#160; &#160; if(isset($tpl_ext))$this->tpl_ext = $tpl_ext;&#160; &#160; &#160; &#160; if(isset($var_left))$this->var_left = $var_left;&#160; &#160; &#160; &#160; if(isset($var_right))$this->var_right = $var_right;&#160; &#160; }&#160; &#160;&#160;&#160; &#160; function load($tplfilename) {&#160; &#160; &#160; &#160; $tplfile = $this->tpl_dir.'/'.$tplfilename.$this->tpl_ext;&#160; &#160; &#160; &#160; if(!file_exists($tplfile))&#160; &#160; &#160; &#160; &#160; &#160; die('Template not found: '.$tplfile);&#160; &#160; &#160; &#160; return $this->cache($tplfilename, $tplfile);&#160; &#160; }&#160; &#160; //判断模板是否缓存,如模板文件有更改则重新编译&#160; &#160; function cache($tplname, $tpl_file) {&#160; &#160; &#160; &#160; $cache_file = $this->cache_dir.'/'.md5($tplname).'.php';&#160; &#160; &#160; &#160; if(!file_exists($cache_file) || filemtime($tpl_file)>filemtime($cache_file))&#160; &#160; &#160; &#160; &#160; &#160; $this->compile($tpl_file, $cache_file);&#160; &#160; &#160; &#160; return $cache_file;&#160; &#160; }&#160; &#160; //编译模板内容到PHP格式,并写入缓存&#160; &#160; function compile($tpl, $cache) {&#160; &#160; &#160; &#160; $body = file_get_contents($tpl);&#160; &#160; &#160; &#160; $vl = $this->var_left;&#160; &#160; &#160; &#160; $vr = $this->var_right;&#160; &#160; &#160; &#160; $patterns = array(&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*include:(.+?)s*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*ifs+(.+?)s*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*elses*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*elseifs+(.+?)s*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*endifs*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*/ifs*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*foreachs+(.+?):(.+?)s*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*endforeachs*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vls*/foreachs*$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vl([0-9a-zA-Z_]+?).([0-9a-zA-Z_]+?).([0-9a-zA-Z_]+?)$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vl([0-9a-zA-Z_]+?).([0-9a-zA-Z_]+?)$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vl([0-9a-zA-Z_[]'"]+?)$vr#i",&#160; &#160; &#160; &#160; &#160; &#160; "#$vl([0-9a-zA-Z_]+?):(.*?)$vr#i"&#160; &#160; &#160; &#160; );&#160; &#160; &#160; &#160; $replacements = array(&#160; &#160; &#160; &#160; &#160; &#160; "<?php include show('\1'); ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php if(\1): ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php else: ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php elseif(\1): ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php endif; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php endif; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php if(count($\1)>0):$autoindex=0;foreach($\1 as \2):$autoindex++; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php endforeach;endif; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php endforeach;endif; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php echo $\1['\2']['\3']; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php echo $\1['\2']; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php echo $\1; ?>",&#160; &#160; &#160; &#160; &#160; &#160; "<?php echo \1(\2); ?>"&#160; &#160; &#160; &#160; );&#160; &#160; &#160; &#160; $body = preg_replace($patterns, $replacements, $body);&#160; &#160; &#160; &#160; file_put_contents($cache, "<?php if(!defined('INVIEW'))die('YIQU'); ?>".$body);&#160; &#160; }}$view = new view();function show($tpl) {&#160; &#160; global $view;&#160; &#160; return $view->load($tpl);}
登录后复制

使用方法PHP文件:

启科网络PHP商城系统
启科网络PHP商城系统

启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。

启科网络PHP商城系统 0
查看详情 启科网络PHP商城系统

立即学习PHP免费学习笔记(深入)”;

<?phpinclude 'view.php';$title = '文档标题';$a=array('a'=>'rows','b'=>array('c'=>'inarray')); include show('index');
登录后复制

使用方法HTML模板文件:

立即学习PHP免费学习笔记(深入)”;

<html><head><title>{title}</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/></head><body>你好,仅供参考<br/>{a.a}{a.b.c}<br/>{foreach a:$v}{autoindex}.{v}<br/>{/foreach}</body></html>{include:footer}
登录后复制

模板文件放在template目录,缓存放在cahce目录,这两个目录都要手动创建,缓存加上判断不可直接访问。可以使用

{include:子模板}

{if 条件}

{foreach 变量:as语句},$autoindex为自增变量

{调用函数:参数}

{变量},包含数组变量简化写法(最多只支持三维数组)

等语法。

好了,整个模板引擎实现比较简单,因为一直比较喜欢这种include方式的模板,只供新手学习原理就好了。


=====================国际惯例=======================

刚开始学着写一些博客,写得不好的地方请见谅,觉得还可以就赏脸赞下吧!

我的QQ群(PHP)336533596,QQ 451309839,欢迎加入。相互交流,聊天吹牛~


立即学习PHP免费学习笔记(深入)”;

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号