用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中象這樣: