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核心技術與最佳實踐》一書中的案例,本人只是稍做修改,非原創。文章爲原創。
相關文章
相關標籤/搜索