php模板引擎原理是什麼?

2020-07-16 10:06:29

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模板引擎原理是什麼?的詳細內容,更多請關注TW511.COM其它相關文章!