一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

在PHP世界中選擇最合適的模板與使用方法第1/2頁

    • <sup id="wc4sk"><input id="wc4sk"></input></sup>
      php世界中選擇最合適的模板

      事情的起因:你用過FastTemplate嗎?
      對于php工程中的模板應(yīng)用,其實(shí)我和我的同事們已經(jīng)在許多的項(xiàng)目中接觸過--關(guān)于它的好處,我想無論是在實(shí)際開發(fā)階段還是上升到設(shè)計(jì)模式的角度都已經(jīng)有很多"前輩先哲"討論過了。就項(xiàng)目實(shí)施而言,在一些中型甚至大型的項(xiàng)目中,有效的將HTML(還有其他文本形式的表現(xiàn)層)和php代碼分開,不僅在開發(fā)階段可以分別提高界面設(shè)計(jì)人員和應(yīng)用程序編寫人員的工作效率,更會(huì)給項(xiàng)目的測試和維護(hù)帶來巨大的便利。

      但是--本文的目的不是討論模板的優(yōu)缺點(diǎn),也不是作為指導(dǎo)性的教程講授如何在php項(xiàng)目中使用模板,而是以應(yīng)用的視角比較兩種php世界中最為流行的模板處理方式(其實(shí)只不過是兩種模板類):phpLIB Template和FastTemplate。

      其實(shí)我一直都在"安靜"的使用著phpLIB Template--很穩(wěn)定而且看上去速度也不錯(cuò),以至于我并不想再去不安的尋找可能更好的替代品--雖然我也知道這個(gè)地球上還有FastTemplate這樣的東西(而且還在Perl的世界中大名鼎鼎)。直到有一天,有一個(gè)同事問我:"不知道FastTemplate怎么樣?為什么我們不試試FastTemplate呢?"

      "好吧,就讓我們試試!"不過作為一個(gè)穩(wěn)妥的方法,在任何新的模式或者方法引入項(xiàng)目之前,最好能夠更加全面的了解它,以及找到一個(gè)或者幾個(gè)足夠說服自己和同事去采用它的理由--對于FastTemplate也不例外。

      主角出場:了解phpLIB Template以及FastTemplate
      前面已經(jīng)說過,我已經(jīng)使用phpLIB有一段時(shí)間了--我想屏幕前的你也許和我一樣,也對這個(gè)優(yōu)秀的工具類庫印象很深吧!同樣,當(dāng)我開始尋求模板的解決辦法時(shí),很自然的就會(huì)在最接近身邊的工具箱里搜尋,于是我找到了phpLIB中的Template類。在最初的很快瀏覽完它提供的API之后(當(dāng)然還得感謝phpLIB詳盡的文檔),我就開始了使用它的歷程--直到現(xiàn)在。

      而FastTemplate似乎名氣更響亮一些,在其發(fā)跡的Perl世界中自然是這樣,在php世界中似乎也是,單單從這一點(diǎn)上就足夠讓人相信它的能力了。

      關(guān)于兩者的使用辦法,本來我想在這里多廢話幾句的;但是畢竟覺得自己恐怕專門寫出兩篇教程來也沒有現(xiàn)有的教程受歡迎--在本文的參考資料中有關(guān)于phpLIB Template和FastTemplate的有名教程,如果你自認(rèn)還沒有對這兩種模板或者其中的一種有所認(rèn)識(shí),建議你先去看看那兩篇文章,應(yīng)該會(huì)得到不少有益的模板應(yīng)用知識(shí)。

      (一番鼠標(biāo)點(diǎn)擊以及眼球轉(zhuǎn)動(dòng)甚至親自編寫測試代碼之后,)現(xiàn)在你對兩種模板都有了一些了解,也許已經(jīng)發(fā)現(xiàn)了它們之間的很多相似之處,在下面我就會(huì)將這些地方歸納一下。

      1. 變量的設(shè)置
        很明顯,{FOO}或者{BAR}的形式在兩種模板中都是指定的形式;也就是說,兩種模板處理方式中,模板文件本身的外貌應(yīng)該可以是一致的(比如都是HTML文件中間含有將要被替換的以{}標(biāo)識(shí)的變量)。
      2. 模板類的初始化(類的構(gòu)建器)
        都需要在構(gòu)建模板類的時(shí)候指定模板文件存在的目錄位置。
      3. 變量的替換
        模板處理中最常用的就是變量替換,兩種方式除了方法名不同之外(phpLIB Template采用set_var(),而FastTemplate采用assign()),用法幾乎也是一致的--可以采用(key, value)的方式,也可以直接傳遞一個(gè)數(shù)組(array(key=>value))。
      4. 模板文件的處理
        都是采用為每一個(gè)模板文件指定一個(gè)句柄(handler)的辦法,同時(shí)句柄也可以作為變量的值替換另一模板文件中的變量。
      5. 解析、輸出過程
        都是需要調(diào)用parse()方法(這個(gè)方法名竟然是相同的)將需要輸出的模板文件解析后賦值給一個(gè)句柄,然后調(diào)用各自輸出的方法(phpLIB Template中是p(),F(xiàn)astTemplate中是FastPrint())輸出該句柄的內(nèi)容并結(jié)束處理。
      6. 重復(fù)解析的過程
        比如從數(shù)據(jù)庫中取出幾條記錄需要顯示而模板文件只有可替換的一行變量的時(shí)候,就很需要這樣的功能。兩者都具有這樣的功能,只是使用時(shí)稍稍有些不同而已(phpLIB Template采用parse(handler, value, true),而FastTemplate采用parse(handler, .value)在值的前面多加一個(gè)點(diǎn)),應(yīng)該說phpLIB Template的方法構(gòu)造得相對優(yōu)美一點(diǎn)。
      7. 區(qū)塊解析的過程(或者可以稱作動(dòng)態(tài)解析)
        想像一下你需要從數(shù)據(jù)庫中取出符合條件的數(shù)據(jù)并顯示在網(wǎng)頁中--但是因?yàn)闂l件會(huì)不盡相同,你并不能明確的知道會(huì)有多少條數(shù)據(jù)--這時(shí)候如果你又要采用模板,那么區(qū)塊就是最好的選擇。它是在模板中用特定的符號定義的部分,這一部分可以反復(fù)的被解析并添加到(而不是前一次的解析被后一次覆蓋)輸出網(wǎng)頁中。區(qū)塊也許就像下面顯示的一樣(左邊是phpLIB Template采用的區(qū)塊設(shè)置,而右邊則是FastTemplate采用的):

      好吧,如果你對以上蒼白的文字介紹還是有些摸不著頭腦,那么我們就來看看兩個(gè)詳盡的模板處理的例程吧!(如果你有興趣對后面的測試代碼進(jìn)行發(fā)掘,就會(huì)發(fā)現(xiàn)其實(shí)以下的兩個(gè)例子都來自那里)


      怎么樣,是不是感覺幾乎是一致的?下面是區(qū)塊解析的例子,你也會(huì)發(fā)現(xiàn)同樣的效果:

      我們的測試目標(biāo)和結(jié)果
      結(jié)束了對phpLIB Template和FastTemplate的了解,應(yīng)該可以進(jìn)入本文的正題了--在應(yīng)用環(huán)境中當(dāng)然應(yīng)該選擇易于使用同時(shí)速度理想的部件構(gòu)建系統(tǒng),那么對于這樣的兩種類似技術(shù),進(jìn)行評測非常有必要。評測應(yīng)該是由兩部分組成:技術(shù)的使用難度和速度的快慢程度--前者是評論的部分,而后者是測試的部分。對于前者,我們主要針對兩個(gè)類提供的API進(jìn)行評論;對于后者,我們會(huì)讓測試的數(shù)據(jù)來說話,當(dāng)然這中間免不了需要編寫一些簡單的測試代碼。

      回合一:技術(shù)的易用性
      這一回合主要是探討phpLIB Template和FastTemplate提供的API的使用情況。應(yīng)該說,前者提供的API更符合php的一些常見編碼慣例(特別是當(dāng)你的項(xiàng)目中采用了phpLIB的其他類時(shí),這樣的規(guī)范性會(huì)對整個(gè)項(xiàng)目有好的影響);而后者的一些方法名總覺得有些別扭(希望你不要覺得這只是我的狹隘看法,比如FastPrint()等等),同時(shí)方法的參數(shù)也不是非常"地道",這一點(diǎn)你也可以從剛才的代碼看出來。

      另外一點(diǎn)需要指出的是,對于模板區(qū)塊的解析,F(xiàn)astTemplate直到最近的版本才開始支持。也就是說,如果你采用了之前的版本,在處理諸如數(shù)據(jù)庫中記錄的輸出等內(nèi)容時(shí),不得不把這塊內(nèi)容獨(dú)立存儲(chǔ)在某處,然后在模板分析處理時(shí)附加上這個(gè)文件--真是一件讓人難受的事情,尤其是對網(wǎng)頁設(shè)計(jì)人員而言。

      當(dāng)然還有一點(diǎn)需要考察--那就是對于php版本的支持。phpLIB產(chǎn)生在php3的時(shí)代,這一點(diǎn)和FastTemplate差不多;但是根據(jù)我們的應(yīng)用phpLIB在現(xiàn)在的php4環(huán)境下運(yùn)行相當(dāng)好,而FastTemplate的網(wǎng)頁上則顯示了一些信息表明對于php4也許它還有一些BUG存在。

      好了,講了這么多(也許你會(huì)覺得都是FastTemplate的壞話),這個(gè)回合的勝利者很明顯:phpLIB Template,尤其是你同時(shí)在使用phpLIB的其他類時(shí),這樣的技術(shù)易用性更加明顯(你將不會(huì)對這些出自同一個(gè)開發(fā)小組的API感到陌生)。

      回合二:處理速度
      也許這才是很多人最關(guān)注的部分--在這個(gè)回合中,我們會(huì)采用兩種模板處理的方式:一種是常規(guī)的分析、替換,另一種是對區(qū)塊的解析、替換--同時(shí)這樣的兩種方式也是在實(shí)際系統(tǒng)中應(yīng)用最多的:前者是一般的頁面處理,后者是關(guān)于數(shù)據(jù)庫內(nèi)容的輸出處理。同時(shí),由于兩種模板類采用的模板文件的格式基本相同,使得我們可以提供幾乎一致的模板文件分別供兩種模板解析,更增加了測試的可信度。

      (有點(diǎn)復(fù)雜的測試方案)

      首先是確定測試的硬件和軟件環(huán)境--硬件肯定是自己的機(jī)器了,Intel Celeron 733MHz, 256M RAM,40G HDD;軟件平臺(tái)中OS為Win2K Pro,Web服務(wù)器為Apache+php,且以模塊方式運(yùn)行。

      其次是規(guī)劃這次測試的系統(tǒng)--當(dāng)然先在Web服務(wù)器的文檔根目錄下開一個(gè)tpl_test的新目錄用以放置這個(gè)測試的所有文件;然后在/tpl_test下建立include目錄以存放兩個(gè)模板類文件(我們測試的核心,以.inc.php為文件擴(kuò)展名)以及一個(gè)測試類文件(包括了計(jì)時(shí)和記錄日志以及讀取日志并分析等功能,以.inc.php為文件擴(kuò)展名)和一個(gè)數(shù)據(jù)文件(為區(qū)塊解析的測試做準(zhǔn)備,主要包含了一個(gè)二維數(shù)組,同樣以.inc.php為文件擴(kuò)展名),建立ihtml目錄存放使用的模板文件(需要被解析的模板文件,以.ihtml為文件擴(kuò)展名),建立logs目錄存放測試產(chǎn)生的日志(后面就是發(fā)現(xiàn),其實(shí)測試的數(shù)據(jù)就是由對這些日志的分析得到的,以.log為文件擴(kuò)展名)。當(dāng)然,兩種模板的處理php文件就放在/test目錄下。這次測試最關(guān)鍵的一點(diǎn)是,還需要建立一個(gè)php文件,對以上提到的負(fù)責(zé)模板處理的文件進(jìn)行數(shù)次調(diào)用:比如一個(gè)文件fast_test.php是采用FastTemplate解析模板的,而phplib_test.php是采用phpLIB Template解析的,那么這個(gè)得出結(jié)果的php文件就負(fù)責(zé)多次以HTTP的方式請求以上的兩個(gè)頁面以獲得測試數(shù)據(jù)。

      選擇待解析的模板和php程序編寫--因?yàn)閮煞N模板處理方式對于模板文件本身的格式要求幾乎一致(比如待替換變量都采用{VAR}的形式等等),因此可以盡量保證同一測試中兩者選用的模板盡可能相同以謀求測試的最大公正性;同時(shí)在前文提到,為模擬現(xiàn)實(shí)系統(tǒng)中常用的兩種模板應(yīng)用:一般的頁面處理和對數(shù)據(jù)庫內(nèi)容的輸出處理,測試使用的模板文件也分成兩種:一種是普通的帶有一些待替換變量的模板文件,另一種是帶有區(qū)塊的需要根據(jù)應(yīng)輸出的內(nèi)容反復(fù)替換的模板文件。同樣對于這兩種模板文件,也需要分別編寫兩種不同的php文件進(jìn)行解析。

      測試方法--在瀏覽器中向/test/result.php提出請求,需要帶參數(shù)type=[simple|complex],在返回的結(jié)果中即可看到兩種模板在簡單或者復(fù)雜模式下的測試結(jié)果。

      開展這樣的速度測試之前會(huì)擬定一個(gè)測試方案,簡單說來就是對于兩種處理方式分別編寫兩個(gè)php測試頁面,同時(shí)有一個(gè)控制測試的頁面多次調(diào)用這兩個(gè)頁面并記錄時(shí)間供采集測試數(shù)據(jù)。(如果有興趣你還可以參考以下詳細(xì)的測試方案,也許會(huì)對你深入了解這次測試有所幫助)

      小結(jié)--在整個(gè)測試系統(tǒng)完成之后,我們應(yīng)該能夠得到/test目錄中如下的文件清單:

      Level 1Level 2Level 3Remark
      /test測試系統(tǒng)的根目錄
      result.php進(jìn)行測試并產(chǎn)生結(jié)果的php文件,測試時(shí)只需要在瀏覽器中請求該頁面即可獲得測試信息
      simple__test_phplib.php使用phpLIB Template對一般模板進(jìn)行分析的php文件
      simple__test_fast.php使用FastTemplate對一般模板進(jìn)行分析的php文件
      complex__test_phplib.php使用phpLIB Template對帶區(qū)塊模板進(jìn)行分析的php文件
      complex__test_fast.php使用FastTemplate對帶區(qū)塊模板進(jìn)行分析的php文件
      /include包含php類文件.inc.php
      phplibTemplate.inc.phpphpLIB Template類文件
      FastTemplate.inc.phpFastTemplate類文件
      TplTest.inc.php測試中需要使用的測試類,包含諸如計(jì)時(shí)、讀取/分析日志等方法。
      data.inc.php測試帶區(qū)塊模板時(shí)采用的數(shù)據(jù)文件。
      /ihtml包含模板文件.ihtml
      simple_phplib.ihtml采用phpLIB Template處理的一般模板文件
      simple_fast.ihtml采用FastTemplate處理的一般模板文件
      complex_phplib.ihtml采用phpLIB Template處理的帶區(qū)塊的模板文件
      complex_fast.ihtml采用FastTemplate處理的帶區(qū)塊的模板文件
      /logs包含日志文件.log
      simple_phplib.log采用phpLIB Template處理一般模板生成的日志
      simple_fast.log采用FastTemplate處理一般模板生成的日志
      complex_phplib.log采用phpLIB Template處理帶區(qū)塊模板生成的日志
      complex_fast.log采用FastTemplate處理帶區(qū)塊模板生成的日志

      php技術(shù)在PHP世界中選擇最合適的模板與使用方法第1/2頁,轉(zhuǎn)載需保留來源!

      鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

      Copyright @ 2011-2018 All Rights Reserved.版權(quán)所有 合作郵箱: zwmobi@qq.com

      蘇ICP備18061994號-3

      主站蜘蛛池模板: 久久精品国产99久久72 | 久久aa| 福利免费视频 | 国产成人精品亚洲77美色 | 91精品国产9l久久久久 | 涩涩视频网站 | 看成年全黄大色黄大片 | 色丫丫 | 黄色午夜视频 | 91视频亚洲 | 久久伊人色综合 | 污片在线免费观看 | 色综合色综合色综合色综合 | 成人小视频在线播放 | 国内精品久久久久久中文字幕 | 激情小说亚洲 | 成年美女黄网站色大片图片 | 国产成人青草视频 | 韩国一级爽快片淫片高清 | 国产乱码精品一区二区三区中 | 97香蕉超级碰碰碰久久兔费 | www.色日本 | 99视频在线观看视频一区 | 色婷婷六月丁香在线观看 | 91国自产精品中文字幕亚洲 | 午夜国产视频 | 久久99久久精品国产只有 | 中文字幕日韩精品麻豆系列 | 免费超爽大片黄网站 | 七七国产福利在线二区 | 四虎看黄 | 综合五月婷婷 | 亚洲欧美国产日产综合不卡 | 国产精选第一页 | 四虎国产精品永久地址99新强 | 在线观看一区 | 久久激情综合网 | 国产精品久久久久久一区二区三区 | 又黄又爽的男女视频 | 激情在线播放免费视频高清 | 国产精品亚洲高清一区二区 |
        <strike id="wc4sk"></strike>