php模板引擎原理是作為視圖層和模型層分離的有效解決方案,讓前後端更好的分工協作,來自於經典的MVC模型,即【模型層-視圖層-控制器模型】,將M和V實現代碼分離,使同一個程式可以使用不同的表現形式。
php模板引擎原理是:
1、模板引擎的由來
模板引擎想法來自於經典的MVC
模型,即模型層- 視圖層- 控制器模型。 MVC本來存在於桌面程式中,M指資料模型,V指使用者介面,C指控制器。使用MVC的目的是將M和V實作程式碼分離,使同一個程式可以使用不同的表現形式。
隨著Web的流行,此模型被引入Web開發中。此時,V(視圖層),也就是通常所說的模板,實現了資料生成和資料展示的分離。早期的視圖通常是由html元素控制介面,隨著互聯網的發展,一些新的表現出技術(例如Flex等)流行起來,MVC使得數據和表現得到分離,一套數據可以用於多種表現層而無需修改邏輯層的程式碼。例如,可以在M層(模型層)產生部落格文章列表的數據,然後可以在傳統的Web頁面、RIA應用、手機應用中使用不同的表現層技術來展示數據,而不用修改邏輯層的程式碼,實現前端和後端的分離。
另外,AJAX
技術的流行、Jquery函式庫的普遍應用,使早期html、Javascript、PHP程式碼混合的情況得到改觀。 AJAX技術的應用使資料的請求和產生、展示實現了分離,促進了表現層(V)和程式碼層的分離。
模板引擎作為視圖層和模型層分離的有效解決方案,讓前後端有更好的分工協作。 PHP開發經歷了前後端混編,到極力推崇模板引擎(以Smarty為代表),再到如今的回歸自然、甚至質疑PHP模板引擎存在的必要性這幾個發展階段。
PHP到底有沒有必要使用模板引擎?模板引擎的原理是什麼?為什麼Smarty會那麼的流行,而如今在PHP社群又引起如此大的爭論?這些都是在接下來要討論的問題。
2程式碼分層的想法
PHP作為輕巧靈活的腳本語言,非常適合Web開發這種開發週期短、需求變化快、強調使用者體驗的需求和業務。 PHP早起開發,通常都是PHP程式碼和HTML混寫,程式碼中到處可見資料庫操作、邏輯判斷、HTML程式碼生成,甚至是Javascript程式碼等。對於小型項目,這種編碼方式能夠很快的完成需求。但一旦專案擴大後,前端邏輯會越來越複雜,這種完全混合的方式必將造成程式碼可讀性差和後期維護困難等等問題。
在PHP發展初期,我們可能會這麼寫:
<html> <head> <meta http-equiv="content-type"content="text/html;charset=utf-8"> <title>最原始的PHP编码风格 - 李苦李</title> </head> <body> <table> <tr> <td>ID</td> <td>姓名</td> </tr> <?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { echo"<tr><td>".$row['id']."</td><td>" .$row['username']."</td></tr>"; } mysql_free_result($result); ?> </table> <?php //其他功能模块 ?> </body> </html>
顯而易見,無論上述程式碼無論是在可讀性、可維護性或程式碼的複用性上都極為差的。需要想辦法實現資料產生和顯示的分離,通常最容易想到的辦法就是把和資料庫打交道的程式碼單獨放到一個檔案中,顯示資料的部分放到另一個檔案中。新建檔案data.php
並取得數據,如下列程式碼所示:
<?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { $data[] =$row; } mysql_free_result($result); ?>
這兩種做法都沒有實現PHP程式碼和HTML程式碼的分離,但是第二種做法相比第一種做法實現了資料獲取和資料展示的分離。在第二種處理方法中,其中一個文件專門負責和資料庫交互,獲取和處理資料。然後交由另一個文件顯示數據,這個負責顯示的文件只是進行一些簡單的邏輯操作,例如循環、判斷、輸出等。顯然,第二種處理方式比第一種處理方式更容易維護。
對於第二種處理方式,我們也可以使用HereDoc語法使其更簡潔,程式碼如下所示:
<?php foreach($dataas$value) { echo<<< TM <tr><td>$value[id]</td><td>$value[username]</td></tr>; TM; } ?>
第二種處理方式即原生態的PHP模板機制,是目前一些PHP程式所採用的模板機制,特點就是簡單靈活、符合PHP的語法和使用習慣、學習成本低。缺點就是無法實現一些進階功能,例如實現可配置化、快取、使得模板檔案脫離PHP語法等等。今天先寫到這裡,這些問題我們將會在接下來的文章中陸續解決。
#相關學習推薦:PHP程式設計從入門到精通
以上是php模板引擎原理是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!