PHP是一種HTML內(nèi)嵌式的在服務(wù)器端執(zhí)行的腳本語言,所以大部分PHP開發(fā)出來的Web應(yīng)用,初始的開發(fā)模板就是混合層的數(shù)據(jù)編程。
雖然通過MVC設(shè)計模式可以把程序應(yīng)用邏輯與網(wǎng)頁呈現(xiàn)邏輯強(qiáng)制性分離,但也只是將應(yīng)用程序的輸入、處理和輸出分開,網(wǎng)頁呈現(xiàn)邏輯(視圖)還會有HTML代碼和PHP程序強(qiáng)耦合在一起。(推薦學(xué)習(xí):PHP編程從入門到精通)
PHP腳本的編寫者必須既是網(wǎng)頁設(shè)計者,又是PHP開發(fā)者。但實際情況是,多數(shù)Web開發(fā)人員要么是精通網(wǎng)頁設(shè)計,能夠設(shè)計出漂亮的網(wǎng)頁外觀,但是編寫的PHP代碼很糟糕;要么僅熟悉PHP編程,能夠?qū)懗鼋训腜HP代碼,但是設(shè)計的網(wǎng)頁外觀很難看。具備兩種才能的開發(fā)人員很少見。
現(xiàn)在已經(jīng)有很多解決方案,可以將網(wǎng)站的頁面設(shè)計和PHP應(yīng)用程序幾乎完全分離。這些解決方案稱為"模板引擎",它們正在逐步消除由于缺乏層次分離而帶來的難題。
模板引擎的目的,就是要達(dá)到上述提到的邏輯分離的功能。它能讓程序開發(fā)者專注于資料的控制或是功能的達(dá)成;而網(wǎng)頁設(shè)計師則可專注于網(wǎng)頁排版,讓網(wǎng)頁看起來更具有專業(yè)感。因此,模化引擎很適合公司的Web開發(fā)團(tuán)隊使用,使每個人都能發(fā)揮其專長。
模板引擎技術(shù)的核心比較簡單。只要將美工頁面(不包含任何的PHP代碼)指定為模板文件,并將這個模板文件中有活動的內(nèi)容,如數(shù)據(jù)庫輸出、用戶交互等部分,定義成使用特殊"定界符"包含的"變量",然后放在模板文件中相應(yīng)的位置。
當(dāng)用戶瀏覽時,由PHP腳本程序打開該模板文件,并將模板文件中定義的變量進(jìn)行替換。這樣,模板中的特殊變量被替換為不同的動態(tài)內(nèi)容時,就會輸出需要的頁面。
美工設(shè)計人員可以與應(yīng)用程序開發(fā)人員獨立工作,因為應(yīng)用的表現(xiàn)和邏輯并非密不可分地糾纏在一起。此外,因為大多數(shù)模板引擎使用的表現(xiàn)邏輯一般比應(yīng)用程序所使用編程語言的語法更簡單,所以,美工設(shè)計人員不需要為完成其工作而在程序語言上花費太多精力。
可以使用同樣的代碼基于不同目標(biāo)生成數(shù)據(jù),例如生成打印的數(shù)據(jù)、生成Web頁面或生成電子數(shù)據(jù)表等。如果不使用模板引擎,則需要針對每種輸出目標(biāo)復(fù)制并修改代碼,這會帶來非常嚴(yán)重的代碼冗余,極大地降低了可管理性。
目前,可以在PHP中應(yīng)用的并且比較成熟的模板有很多,例如Smarty、PHPLIB、IPB、xingTemplate等幾十種。使用這些通過PHP編寫的模板引擎,可以讓你的代碼脈絡(luò)更加清晰,結(jié)構(gòu)更加合理化。
也可以讓網(wǎng)站的維護(hù)和更新變得更容易,創(chuàng)造一個更加良好的開發(fā)環(huán)境,讓開發(fā)和設(shè)計工作更容易結(jié)合在一起。
但是,對于一個PHP程序員來說,沒有哪一個PHP模板對他是最合適、最完美的。因為PHP模板就是大眾化的東西,并不是針對某個人開發(fā)的。
如果能在對模板的特點、應(yīng)用有清楚的認(rèn)識基礎(chǔ)上,充分認(rèn)識到模板的優(yōu)勢劣勢,就可以知道是否選擇使用模板或選擇使用哪個模板。