PHP实现简易的模板引擎

PHP实现简易的模板引擎

1.MVC简介

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

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

[百度百科]php

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

2.本文重点:模板引擎

在视图层,PHP能够采用两种方式编写:

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

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

    <!DOCTYPE html>


    混写代码


    商品信息:
    <?php
    mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
    mysql_select_db("shop");
    $result = mysql_query("select * from sh_goods");
    ?>
    mysql


      <?php while (mysql_fetch_array($result)) {?>
    • <?php echo $result['good_name']; ?>

    • <?php } ?>

    <?php
    mysql_free_result($result);
    mysql_close();
    ?>

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

模板引擎有两种机制

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

1.原生态机制

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

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语法等高级功能也不容易实现。web

2.更强大的模板机制

该机制与上一个机制恰好相反,在负责数据操做的文件中包含模板,模板只负责显示便可,不用考虑php操做。
本引擎的执行流程以下:
执行流程正则表达式

该模板引擎有如下几部分组成

  1. Cache文件夹: 该文件夹存放编译完成后的文件
  2. Template文件夹: 该文件夹存放模板文件
  3. Template.class.php Template类提供了读取和设置配置的方法,注入变量方法,展现模板的方法。
  4. Compile.class.php Compile类提供了模板解析方法,模板解析方法是经过预先定义好的正则表达式匹配,并替换成相应的PHP代码,同时也添加了PHP原生代码的支持。咱们也能够简单地经过添加正则表达式,来扩充变量标签。

因为代码有点长,因此放在github上,O(∩_∩)O~,代码比较简单,能够加深咱们对模板引擎的理解,smarty等更复杂,但基本原理差很少就是这样。
具体代码连接以下:https://www.github.com/fengyuhetao/Code.git,该目录Template Engine中就是简易的模板引擎代码。sql

说明:该源代码是基于《PHP核心技术与最佳实践》一书中的案例,本人只是稍做修改,非原创。文章为原创。
相关文章
相关标签/搜索