關於template的思考,對模板熟悉者請進。

用PHP進行項目開發,由於PHP的解釋執行,我們經常會面臨執行速度和通用性、編程效率產生矛盾,然後又如何取舍的問題。PHP的早期版本都是面向過程的,以執行速度快著稱,在開發復雜應用時日顯捉襟見肘,隨著4.3及以後版本的發行可以看到PHP將向面向對象方向發展,
用PHP進行項目開發,由於PHP的解釋執行,我們經常會面臨執行速度和通用性、編程效率產生矛盾,然後又如何取舍的問題。PHP的早期版本都是面向過程的,以執行速度快著稱,在開發復雜應用時日顯捉襟見肘,隨著4.3及以後版本的發行可以看到PHP將向面向對象方向發展,於是大傢逐漸習慣寫大量的基類,大量的使用include_once,這樣使我們的開發變得有序,程序邏輯更清晰,當我們開發完成之後,發現執行效率不如以前,PHP在解析和文件調用上花費過多的開銷,一個頁面使用十幾二十個include會將PHP拖垮,我們的註意力開始從數據庫轉向PHP程序的優化,從一方面來講,大型數據驅動用面向對象模式無可非議,另一方面,PHP的代碼應該突出類C語言的簡潔高效。於是我們迷茫瞭:如何保證大型應用的執行效率?這是我思考已久的問題。
也許上面的話題涉及的太多,下面我隻想具體談談大量模板處理的問題:對於幾百個頁面的規模,每頁都有動態數據,少量頁面涉及較多的變量,如何方便地實行模板變量替換?難道直接用set_var()一行一行地替換?
模板機制的廣泛采用使PHP代碼和HTML混雜在一起成為歷史,解決瞭前臺輸出和後臺程序的沖突,前臺對程序員是透明的,同樣後臺對美編也是透明的,優越性不言而喻,而我們所付出的代價隻是約定好一組變量名,並簡單的替換一下而已。然而有幾百個網頁就有幾百個模板,每一個頁面可能有數十個變量,於是這一簡單的變量替換工作也變成瞭累贅,以PHPLIB的template為例,就需要幾十行set_var(),我開始設想一個VIEW類,它將繼承template,定義一個數組成員保存用來替換的變量名表,提供setvalue()和output()方法,通過setvalue($key,$value)來賦值,很明顯$value就是從數據庫取出的數據,$key是將要替換的變量,難點就是如何確定$key(即HTML中{}中的名字)的值, 舉個例子,比如在模板文件my.tpl中象這樣:

您的用戶名是
職位是 在PHP文件中應該象這樣($name和$position是動態數據): …… $tp->set_file("filehandle","my.tpl"); $vararr=array("tpname"=>$name,"tpposition=>$position); tp->set_var($vararr); tp->pparse("out","filehandle"); 在倒數第二行我用數組傳遞要替換的變量列表,一個頁面有一二十個模板變量是正常,問題是能不能方便地一次性設置好數組下標(即要替換的變量名例如"tpname"和"tpposition"),否則隻能一行行地set_var,目前我仍在探索中,歡迎大傢踴躍交流這方面的解決辦法。

發佈留言