1.MVC简介

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度):

1. Model(模型)表示应用程序核心(比如数据库记录列表)。
2. View(视图)显示数据(数据库记录)
3. Controller(控制器)处理输入(写入数据库记录)。

[百度百科]

MVC的流程图如下(来源百度百科):

2.本文重点:模板引擎

在视图层,PHP可以采用两种方式编写:

  1. PHP代码和HTML代码混写,甚至JavaScript等
  2. 采用模板引擎使得数据和显示分离,这种方式更易于维护。

    首先让我们来看一下混写代码:

    <!DOCTYPE html>
    <html>
    <head>
    <title>混写代码</title>
    </head>
    <body>
    商品信息:
    <?php
    mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
    mysql_select_db("shop");
    $result = mysql_query("select * from sh_goods");
    ?>
    <ul>
    <?php while (mysql_fetch_array($result)) {?>
    <li><?php echo $result['good_name']; ?></li>
    <?php } ?>
    </ul>
    <?php
    mysql_free_result($result);
    mysql_close();
    ?>
    </body>
    </html>

这种方式往往随着前端逻辑的复杂度变得越来越大,代码的可读性也会变得很差,代码的可重用性也不好。(比如我们需要重复的编写从数据库中获取数据的代码)

模板引擎有两种机制

接下来,我们用原生态模板机制来实现

1.原生态机制

该机制主要是执行数据库操作的代码get_data.php单独放到一个文件中,显示的hmtl代码show_page.php放到另一个文件中,然后在html代码show_page.php中包含执行数据库操作的代码get_data.php.代码如下:

get_data.php
    <?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
    <!DOCTYPE html>
<html>
<head>
<title>分离代码</title>
</head>
<body>
商品信息:
<ul>
<?php
include 'get_data.php';
foreach ($data as $key => $value) {
?>
<li><?php echo $value['good_name']; ?></li>
<?php } ?>
</ul>
</body>
</html>

该机制比较简单,符合PHP的语法和使用的习惯,显然比混写代码更容易维护。但是,有时考虑到网站的性能,我们想要缓存代码的时候,这种方法就不能提供支持了。类似的,错误处理,可配置化,脱离php语法等高级功能也不容易实现。

2.更强大的模板机制

该机制与上一个机制刚好相反,在负责数据操作的文件中包含模板,模板只负责显示即可,不用考虑php操作。
本引擎的执行流程如下:

php 实现简易模板引擎的更多相关文章

  1. KOA的简易模板引擎实现方式

    上上一期链接--也就是本文的基础,参考KOA,5步手写一款粗糙的web框架 上一期链接--有关Router的实现思路,这份Koa的简易Router手敲指南请收下 本文参考仓库:点我 上一期科普了Rou ...

  2. js 简易模板引擎 , 持续更新。。。

    <script> var _mytpl = (function(){ var _verson = 1.0; return { _data:{}, load:function(html,da ...

  3. MVC开发模式以及Smarty模板引擎的使用

    Linux 全局安装 composer 将目录切换到/usr/local/bin/目录 cd /usr/local/bin/ 在 bin 目录中下载 composer curl -sS https:/ ...

  4. PHP实现简易的模板引擎

    PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...

  5. 简易js模板引擎

    前面 js 模板引擎有很多很多,我以前经常用 art-template ,有时候也会拿 vue 来当模板引擎用. 直到...... 年初的时候,我还在上个项目组,那时候代码规范是未经允许不能使用 [外 ...

  6. Mustache.js前端模板引擎源码解读

    mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...

  7. JST(JavaScript Trimpath)前端模板引擎简介

    JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...

  8. JS模板引擎 :ArtTemplate (2)

    上一篇初略的介绍了一下javascript中的模板引擎,有兴趣的可以戳 这里 . 这一篇将带着大家一起做一个简易的模板引擎, 上一篇介绍到:模板引擎其实做的就是两件事. 根据一定的规则,解析我们所定义 ...

  9. pug模板引擎(原jade)

    前面的话 为什么要引入pug,pug有什么特别之处呢?有一些嵌套层次较深的页面,可能会出现巢状嵌套,如下图所示 在后期维护和修改时,一不小心少了一个尖括号,或者某个标签的开始和闭合没有对应上,就会导致 ...

随机推荐

  1. python socket服务器进行远程升级

    # coding:utf-8from socket import *import binascii, linecache, time ServerUrl = "127.0.0.1:900&q ...

  2. Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效

    解决方案: 使用checkedValue和checked 组合,如下代码. <div><input type="radio" name="flavorG ...

  3. String类使用方法

    1.1.字节与字符串相互转换 |-字节-->String:public String(byte[]  bytes)        |-String-->字节: public byte[] ...

  4. Gym 101102C Bored Judge(set--结构体集合)

    这个故事告诉我们,WA了一定要找自己的原因... ... 当我开始用set去做的时候,发现一直过不去,一开始忘了把初始排名加进去,后来忘了第0秒,第0秒第一的id = 1 这个题目的做法也不只这一种, ...

  5. wxpython 安装教程

    wxpython在windows 上的安装,需要在wxpython官网上下载对应的版本:Python分为32和64位系统不是系统的32位和64位 所以可以先在IDE 下输入Python看下当前是32还 ...

  6. android中RelativeLayout无法填充ScrollView布局的问题

    ScrollView是解决布局过长的情况下使用,一遍其下面会有个顶部布局,我项目里面是RelativeLayout,但是RelativeLayout无论设置 android:layout_height ...

  7. java线程condition

    子线程先执行一段代码,再主线程再执行一段代码,两个线程都循环执行50遍.用2个condition来实现,一个是子线程的condition,一个是主线程的condition,代码如下: package ...

  8. jquery远程班备忘

    基础第一课: 1. $(obj)获取的是一个集合,因此length最小是1, jquery,如果元素不存在,也不会报错,可通过$(obj).length<1就可以查看该元素是否存在. 2. at ...

  9. 《JS权威指南学习总结--8.7 函数属性、方法和构造函数》

    内容要点:   在JS程序中,函数是值.对函数执行typeof运算会返回字符串 "function",但是函数是JS中特殊的对象.因为函数也是对象,它们也可以拥有属性和方法,就像普 ...

  10. PAT 团体程序设计天梯赛-练习集L1-011. A-B

    本题要求你计算A-B.不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B. 输入格式: 输入在2行中先后给出字符串A和B.两字符串的长度 ...