PHP实现简易的模板引擎
1.MVC简介
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度):
1. Model(模型)表示应用程序核心(比如数据库记录列表)。
2. View(视图)显示数据(数据库记录)
3. Controller(控制器)处理输入(写入数据库记录)。
MVC的流程图如下(来源百度百科):
2.本文重点:模板引擎
在视图层,PHP可以采用两种方式编写:
PHP代码和HTML代码混写,甚至JavaScript等
采用模板引擎使得数据和显示分离,这种方式更易于维护。
首先让我们来看一下混写代码:
混写代码商品信息:
mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
mysql_select_db("shop");
$result = mysql_query("select * from sh_goods");
?>
mysql_free_result($result);
mysql_close();
?>
这种方式往往随着前端逻辑的复杂度变得越来越大,代码的可读性也会变得很差,代码的可重用性也不好。(比如我们需要重复的编写从数据库中获取数据的代码)
模板引擎有两种机制
接下来,我们用原生态模板机制来实现
1.原生态机制
该机制主要是执行数据库操作的代码get_data.php单独放到一个文件中,显示的hmtl代码show_page.php放到另一个文件中,然后在html代码show_page.php中包含执行数据库操作的代码get_data.php.代码如下:
get_data.php
mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
mysql_select_db("shop");
$result = mysql_query("select * from sh_goods");
$data = array();
while (mysql_fetch_array($result)) {
$data[] = $result['good_name'];
}
mysql_free_result($result);
mysql_close();
?>
show_page.php
分离代码商品信息:
include 'get_data.php';
foreach ($data as $key => $value) {
?>
<?php echo $value['good_name']; ?>该机制比较简单,符合PHP的语法和使用的习惯,显然比混写代码更容易维护。但是,有时考虑到网站的性能,我们想要缓存代码的时候,这种方法就不能提供支持了。类似的,错误处理,可配置化,脱离php语法等高级功能也不容易实现。
2.更强大的模板机制
该机制与上一个机制刚好相反,在负责数据操作的文件中包含模板,模板只负责显示即可,不用考虑php操作。
本引擎的执行流程如下:
该模板引擎有以下几部分组成
Cache文件夹: 该文件夹存放编译完成后的文件
Template文件夹: 该文件夹存放模板文件
Template.class.php Template类提供了读取和设置配置的方法,注入变量方法,展示模板的方法。
Compile.class.php Compile类提供了模板解析方法,模板解析方法是通过预先定义好的正则表达式匹配,并替换成相应的PHP代码,同时也添加了PHP原生代码的支持。我们也可以简单地通过添加正则表达式,来扩充变量标签。
由于代码有点长,所以放在github上,O(∩_∩)O~,代码比较简单,可以加深我们对模板引擎的理解,smarty等更复杂,但基本原理差不多就是这样。
具体代码链接如下:https://www.github.com/fengyuhetao/Code.git,该目录Template Engine中就是简易的模板引擎代码。
说明:该源代码是基于《PHP核心技术与最佳实践》一书中的案例,本人只是稍作修改,非原创。文章为原创。
简易js模板引擎
前面 js 模板引擎有很多很多,我以前经常用 art-template ,有时候也会拿 vue 来当模板引擎用. 直到...... 年初的时候,我还在上个项目组,那时候代码规范是未经允许不能使用 [外 ...
JS模板引擎 :ArtTemplate (2)
上一篇初略的介绍了一下javascript中的模板引擎,有兴趣的可以戳 这里 . 这一篇将带着大家一起做一个简易的模板引擎, 上一篇介绍到:模板引擎其实做的就是两件事. 根据一定的规则,解析我们所定义 ...
一个简单的PHP模板引擎
PHP早期开发中通常是PHP代码和HTML代码混写,这也使代码中充斥着数据库操作,逻辑处理等.当项目不大时,这样的代码还可以接受,但是随着项目不断扩大,我们就会发现同一个文件中同时存在前端逻辑和后端处 ...
php 实现简易模板引擎
1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Model(模型)表示应用程序核心 ...
Mustache.js前端模板引擎源码解读
mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...
JST(JavaScript Trimpath)前端模板引擎简介
JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...
pug模板引擎(原jade)
前面的话 为什么要引入pug,pug有什么特别之处呢?有一些嵌套层次较深的页面,可能会出现巢状嵌套,如下图所示 在后期维护和修改时,一不小心少了一个尖括号,或者某个标签的开始和闭合没有对应上,就会导致 ...
php模板原理PHP模板引擎smarty模板原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...
PHP的模板引擎smarty原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...
随机推荐
简易版的TimSort排序算法
欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Ja ...
2016huasacm暑假集训训练四 递推_C
题目链接:http://acm.hust.edu.cn/vjudge/contest/125308#problem/C 题意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形 这个题只 ...
iOS:WebKit内核框架的应用与解析
原文:http://www.cnblogs.com/fengmin/p/5737355.html 一.摘要: WebKit是iOS8之后引入的专门负责处理网页视图的框架,其比UIWebView更加强大 ...
UML建模
1.包含<> 包含是指当多个用例中存在相同的事件流时,可以把这些公共事件流抽象成公共用例,这个公共用例称之为抽象用例(跟类的概念有点相像,类是多个对象的抽象定 ...
下一个项目为什么要用 SLF4J
阿里巴巴 Java 开发手册 前几天阿里巴巴在云栖社区首次公开阿里官方Java代码规范标准,就是一个PDF手册,有命名规范,让你知道自己原来取的每一个类名.变量名都是烂名字,真替你家未来孩子担心:有集 ...
JDK 源码学习——ByteBuffer
ByteBuffer 在NIO的作用 Java SE4 开始引入Java NIO,相比较于老的IO,更加依赖底层实现.引入通道(Channels),选择器(selector),缓冲(Buffers). ...
ABP框架系列之二十七:(Feature-Management-特征管理)
Introduction Most SaaS (multi-tenant) applications have editions (packages) those have different fea ...
C#连接数据库插入数据
首先是安装JDBC操作数据库的包,,当然自己看着办哈,可以自己下载以后导入,或者直接让软件本身下载 第一种方式 第二种 咱自己下载个低版本的 点击这个链接 点击以后呢可以直接下载下来,然后导入(大家百 ...
M2团队贡献分分配
经过考虑,M2阶段团队贡献分分配如下: 团队成员 贡献分 12061166 宋天舒 56 12061157 黄漠源 52 12061159 张迎春 55 12061175 刘翔宇 54 1206117 ...
iOS10--消息通知的基本使用
官方将通知单独放在了UserNotifications.framework,使用时需要导入框架.UserNotifications.framework主要类文件: UNCalendarNotifica ...