站長資訊網
        最全最豐富的資訊網站

        一文詳細PHP模板引擎的原理(附代碼示例)

        開發一個web項目,通常分為兩部分,一部分是GUI,即界面、美工,使用HTML,CSS,JS編寫,另一部分則是業務邏輯,即程序、功能,使用PHP編寫。而模板引擎則是聯系這兩部分的“橋梁”,可理解成一個PHP類,里面定義了許多方法,實現了將PHP的原始輸出加載上界面樣式后再輸出。

        沒用模板之前的編寫的代碼是這樣的:

        <?php  $title = “標題”;  $content = “內容”;  ?>  <html>  <head><title><?php echo $title; ?></title></head>  <body><?php echo $content; ?></body>  </html>

        這樣的話美工與邏輯沒有分離,簡單的說就是PHP程序員不僅要寫程序還要精通美工,這往往十分困難,因此需要將這兩部分工作分開。

        在此通過自己創建一個簡單的模板引擎為例子,更好的體會模板引擎的原理。

        之前說了開發一個web項目分成GUI與業務邏輯兩部分,因此我們創建兩個文件夾,一個命名為“templates”,里邊存放模板,新建一個tpl.html文件,另一個命名為“PHP”,里邊存放業務邏輯,新建一個index.php文件。

        tpl.html文件代碼通常是這樣:

        <html>  <head><title><{$title}></title></head>  <body><{ $content;}></body>  </html>

        可以看出來,和之前的代碼相比,tpl.html中只有html代碼,沒有php代碼,但是增加了新的標簽,這類標簽是自己定義的,里面的內容只有經過模板引擎編譯后才能被識別,編譯后的文件存放在“templates_c”文件夾下。這個文件主要是界面設計用的,將大量使用到CSS,JS等技術。

        這時候tpl.html和index.php仍舊是分離的,互不干擾,因此需要一個“橋梁”連接,即模板引擎,其實就是一個PHP類,故在此可以創建一個mytpl.class.php的PHP文件。

        mytpl.class.php文件通常定義一個類MyTpl,類中需定義一個數組tpl_var[]用于存放tpl.html中自定義內容標簽的參數,此外還需定義一些方法,這些方法最主要的目的是將tpl.hml中無法識別的的內容標簽轉換成PHP語句,然后再寫到一個“templates_c”文件夾下的tpl_c.html中,這個過程就是所謂的編譯。

        通常tpl_c.html文件的代碼是這樣的:

        <html>  <head><title><?php echo $this->tpl_var[“title”]; ?></head>  <body><?php echo $this->tpl_var[“content”]; ?}></body>  </html>

        可以看出上面的代碼是可以被識別的,因為自定義的內容標簽已經被替換成PHP語句了,但是title和content的值是多少我們還不得而知,這時候之前創建的index.php要上場了.

        index.php通常它代碼是這樣的:

        include  “tpl.class.php文件”;//加載模板引擎  $tpl = new MyTpl();//實例化一個模板類  $title = “標題”;  $content = “內容”;  $tpl->assign(“title”,$title);//調用模板類中的方法,分配變量  $tpl->assign(“content”,$content);  $tpl->display(“tpl.html”);//調用模板類中的方法,用于顯示編譯后的內容

        上面的代碼只是一些簡單的描述代碼,其中的變量的值可以是直接定義的也可以是從數據庫中獲取的,此外該文件還可以編寫一些復雜的PHP程序,這也就是之前說的業務邏輯。

        這樣GUI和業務邏輯的工作就分離了,美工設計人員只需要編寫模板文件就可以改變web的界面,而PHP程序員則可以專心編寫自己的程序。

        公司內部一般都有自己的模板引擎,而通常模板引擎自己寫的話完全沒有必要,因為市面上已經有一些很成熟的模板引擎了,比如Smarty,我們只需要懂得如何使用它就好了。

        推薦學習:《PHP視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 热99re久久国超精品首页| 99久免费精品视频在线观看| 国产精品免费αv视频| 国产高清在线精品一区二区三区 | 四虎影视永久在线精品免费| 亚洲性日韩精品一区二区三区| 欧美日韩人妻精品一区二区在线| A级精品国产片在线观看| 欧美+亚洲+精品+三区| 国产精品青草视频免费播放| 无码精品蜜桃一区二区三区WW| 国产在线精品无码二区| 99久re热视频这里只有精品6| 欧美精品黑人粗大| 99久久精品影院老鸭窝| 精品国产一区二区三区在线观看| 亚洲av无码精品网站| 国产精品一久久香蕉产线看| 久久精品国产亚洲Aⅴ香蕉| 伊人久久精品影院| 欧美亚洲国产精品第一页| 亚洲成人国产精品| 四虎国产精品免费观看| 中文字幕无码久久精品青草| 精品一区二区久久久久久久网站| 亚洲国产精品13p| 亚洲欧美日韩精品永久在线| 无码8090精品久久一区| 日本一区精品久久久久影院 | 2020久久精品国产免费| 亚洲国产主播精品极品网红| 亚洲国产精品久久久久网站| 日韩精品无码AV成人观看| 精品91自产拍在线观看| 国产在线精品网址你懂的| 亚洲AV永久无码精品| 国内精品久久久久久不卡影院 | 国产精品自在线拍国产第一页 | 国产成人精品一区二区三区免费| 呦交小u女国产精品视频| 久久久久久极精品久久久|