站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

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

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

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

        <?php  $title = “標(biāo)題”;  $content = “內(nèi)容”;  ?>  <html>  <head><title><?php echo $title; ?></title></head>  <body><?php echo $content; ?></body>  </html>

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

        在此通過自己創(chuàng)建一個(gè)簡(jiǎn)單的模板引擎為例子,更好的體會(huì)模板引擎的原理。

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

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

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

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

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

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

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

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

        可以看出上面的代碼是可以被識(shí)別的,因?yàn)樽远x的內(nèi)容標(biāo)簽已經(jīng)被替換成PHP語句了,但是title和content的值是多少我們還不得而知,這時(shí)候之前創(chuàng)建的index.php要上場(chǎng)了.

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

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

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

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

        公司內(nèi)部一般都有自己的模板引擎,而通常模板引擎自己寫的話完全沒有必要,因?yàn)槭忻嫔弦呀?jīng)有一些很成熟的模板引擎了,比如Smarty,我們只需要懂得如何使用它就好了。

        推薦學(xué)習(xí):《PHP視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 亚洲Av无码精品色午夜| 国产成人亚洲综合无码精品| 乱色精品无码一区二区国产盗| 337P亚洲精品色噜噜| 亚洲av午夜福利精品一区| 精品精品国产高清a毛片| 国产亚洲精品xxx| 国产精品jizz视频| 四虎成人精品无码| 亚洲?V乱码久久精品蜜桃| 中文字幕亚洲精品资源网| 精品久久久噜噜噜久久久| 亚洲一区二区精品视频| 欧美午夜精品久久久久久浪潮| 99久久精品国产一区二区三区| 99久久精品费精品国产一区二区| 青青青国产精品一区二区| 中文无码精品一区二区三区| 欧美日韩精品| 精品一久久香蕉国产线看播放| 国产高清国内精品福利99久久| 午夜影视日本亚洲欧洲精品一区| 国产精品久久一区二区三区| 99久久er这里只有精品18| 国产成人精品无码播放| 精品人伦一区二区三区潘金莲 | 99精品人妻无码专区在线视频区| 中文字幕久久精品| 亚洲国产综合精品中文字幕| 欧美精品色婷婷五月综合 | 日韩欧精品无码视频无删节| 亚洲欧美国产∧v精品综合网| 日韩精品一区二区三区视频| 亚洲精品97久久中文字幕无码| 日韩欧美一区二区三区中文精品| 欧美日韩精品久久久免费观看| 污污网站国产精品白丝袜| 亚洲国产精品一区二区九九| 亚洲国产精品一区二区第一页免| 亚洲精品视频免费| 久久香蕉超碰97国产精品|