程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHPLIB Template和FastTemplate的比較

PHPLIB Template和FastTemplate的比較

編輯:PHP綜合

php工程中的模板應用,是進行中型乃至大型項目中建議采用的處理表現層的好辦法。但是具體到模板的實施,采用何種現有的模板技術卻需要進行一番比較。

php世界中比較受關注的模板處理有phplib template和fasttemplate兩種,我們對技術的易用性和速度進行了評測--想知道結果嗎?

事情的起因:你用過fasttemplate嗎?

對於php工程中的模板應用,其實我和我的同事們已經在許多的項目中接觸過--關於它的好處,我想無論是在實際開發階段還是上升到設計模式的角度都已經有很多"前輩先哲"討論過了。就項目實施而言,在一些中型甚至大型的項目中,有效的將html(還有其他文本形式的表現層)和php代碼分開,不僅在開發階段可以分別提高界面設計人員和應用程序編寫人員的工作效率,更會給項目的測試和維護帶來巨大的便利。

但是--本文的目的不是討論模板的優缺點,也不是作為指導性的教程講授如何在php項目中使用模板,而是以應用的視角比較兩種php世界中最為流行的模板處理方式(其實只不過是兩種模板類):phplib template和fasttemplate。

其實我一直都在"安靜"的使用著phplib template--很穩定而且看上去速度也不錯,以至於我並不想再去不安的尋找可能更好的替代品--雖然我也知道這個地球上還有fasttemplate這樣的東西(而且還在perl的世界中大名鼎鼎)。直到有一天,有一個同事問我:"不知道fasttemplate怎麼樣?為什麼我們不試試fasttemplate呢?"

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

主角出場:了解phplib template以及fasttemplate

前面已經說過,我已經使用phplib有一段時間了--我想屏幕前的你也許和我一樣,也對這個優秀的工具類庫印象很深吧!同樣,當我開始尋求模板的解決辦法時,很自然的就會在最接近身邊的工具箱裡搜尋,於是我找到了phplib中的template類。在最初的很快浏覽完它提供的api之後(當然還得感謝phplib詳盡的文檔),我就開始了使用它的歷程--直到現在。

而fasttemplate似乎名氣更響亮一些,在其發跡的perl世界中自然是這樣,在php世界中似乎也是,單單從這一點上就足夠讓人相信它的能力了。

關於兩者的使用辦法,本來我想在這裡多廢話幾句的;但是畢竟覺得自己恐怕專門寫出兩篇教程來也沒有現有的教程受歡迎--在本文的參考資料中有關於phplib template和fasttemplate的有名教程,如果你自認還沒有對這兩種模板或者其中的一種有所認識,建議你先去看看那兩篇文章,應該會得到不少有益的模板應用知識。

(一番鼠標點擊以及眼球轉動甚至親自編寫測試代碼之後,)現在你對兩種模板都有了一些了解,也許已經發現了它們之間的很多相似之處,在下面我就會將這些地方歸納一下。

變量的設置

很明顯,{foo}或者{bar}的形式在兩種模板中都是指定的形式;也就是說,兩種模板處理方式中,模板文件本身的外貌應該可以是一致的(比如都是html文件中間含有將要被替換的以{}標識的變量)。

模板類的初始化(類的構建器)

都需要在構建模板類的時候指定模板文件存在的目錄位置。

變量的替換

模板處理中最常用的就是變量替換,兩種方式除了方法名不同之外(phplib template采用set_var(),而fasttemplate采用assign()),用法幾乎也是一致的--可以采用(key, value)的方式,也可以直接傳遞一個數組(array(key=>value))。

模板文件的處理

都是采用為每一個模板文件指定一個句柄(handler)的辦法,同時句柄也可以作為變量的值替換另一模板文件中的變量。

解析、輸出過程

都是需要調用parse()方法(這個方法名竟然是相同的)將需要輸出的模板文件解析後賦值給一個句柄,然後調用各自輸出的方法(phplib template中是p(),fasttemplate中是fastprint())輸出該句柄的內容並結束處理。

重復解析的過程

比如從數據庫中取出幾條記錄需要顯示而模板文件只有可替換的一行變量的時候,就很需要這樣的功能。兩者都具有這樣的功能,只是使用時稍稍有些不同而已(phplib template采用parse(handler, value, true),而fasttemplate采用parse(handler, .value)在值的前面多加一個點),應該說phplib template的方法構造得相對優美一點。

區塊解析的過程(或者可以稱作動態解析)

想像一下你需要從數據庫中取出符合條件的數據並顯示在網頁中--但是因為條件會不盡相同,你並不能明確的知道會有多少條數據--這時候如果你又要采用模板,那麼區塊就是最好的選擇。它是在模板中用特定的符號定義的部分,這一部分可以反復的被解析並添加到(而不是前一次的解析被後一次覆蓋)輸出網頁中。區塊也許就像下面顯示的一樣(左邊是phplib template采用的區塊設置,而右邊則是fasttemplate采用的):

好吧,如果你對以上蒼白的文字介紹還是有些摸不著頭腦,那麼我們就來看看兩個詳盡的模板處理的例程吧!(如果你有興趣對後面的測試代碼進行發掘,就會發現其實以下的兩個例子都來自那裡)

怎麼樣,是不是感覺幾乎是一致的?下面是區塊解析的例子,你也會發現同樣的效果:

我們的測試目標和結果

結束了對phplib template和fasttemplate的了解,應該可以進入本文的正題了--在應用環境中當然應該選擇易於使用同時速度理想的部件構建系統,那麼對於這樣的兩種類似技術,進行評測非常有必要。評測應該是由兩部分組成:技術的使用難度和速度的快慢程度--前者是評論的部分,而後者是測試的部分。對於前者,我們主要針對兩個類提供的api進行評論;對於後者,我們會讓測試的數據來說話,當然這中間免不了需要編寫一些簡單的測試代碼。

回合一:技術的易用性

這一回合主要是探討phplib template和fasttemplate提供的api的使用情況。應該說,前者提供的api更符合php的一些常見編碼慣例(特別是當你的項目中采用了phplib的其他類時,這樣的規范性會對整個項目有好的影響);而後者的一些方法名總覺得有些別扭(希望你不要覺得這只是我的狹隘看法,比如fastprint()等等),同時方法的參數也不是非常"地道",這一點你也可以從剛才的代碼看出來。

另外一點需要指出的是,對於模板區塊的解析,fasttemplate直到最近的版本才開始支持。也就是說,如果你采用了之前的版本,在處理諸如數據庫中記錄的輸出等內容時,不得不把這塊內容獨立存儲在某處,然後在模板分析處理時附加上這個文件--真是一件讓人難受的事情,尤其是對網頁設計人員而言。

當然還有一點需要考察--那就是對於php版本的支持。phplib產生在php3的時代,這一點和fasttemplate差不多;但是根據我們的應用,phplib在現在的php4環境下運行相當好,而fasttemplate的網頁上則顯示了一些信息表明對於php4也許它還有一些bug存在。

好了,講了這麼多(也許你會覺得都是fasttemplate的壞話),這個回合的勝利者很明顯:phplib template,尤其是你同時在使用phplib的其他類時,這樣的技術易用性更加明顯(你將不會對這些出自同一個開發小組的api感到陌生)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved