溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php模板引擎的作用和用法

發(fā)布時間:2020-07-02 11:41:08 來源:億速云 閱讀:159 作者:Leah 欄目:編程語言

這期內(nèi)容當中小編將會給大家?guī)碛嘘Pphp模板引擎的作用和用法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1、模板引擎的由來

模板引擎思想來自于經(jīng)典的MVC模型,即模型層 - 視圖層 - 控制器模型。MVC本來存在于桌面程序中,M指數(shù)據(jù)模型,V指用戶界面,C指控制器。使用MVC的目的是將M和V實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。

隨著Web的流行,這一模型被引入Web開發(fā)中。此時,V(視圖層),也就是通常所說的模板,實現(xiàn)了數(shù)據(jù)生成和數(shù)據(jù)展示的分離。早期的視圖通常是由html元素控制界面,隨著互聯(lián)網(wǎng)的發(fā)展,一些新的表現(xiàn)出技術(例如Flex等)流行起來,MVC使得數(shù)據(jù)和表現(xiàn)得到分離,一套數(shù)據(jù)可以用于多種表現(xiàn)層而無需修改邏輯層的代碼。例如,可以在M層(模型層)生成博客文章列表的數(shù)據(jù),然后可以在傳統(tǒng)的Web頁面、RIA應用、手機應用中使用不同的表現(xiàn)層技術來展示數(shù)據(jù),而不用修改邏輯層的代碼,實現(xiàn)前端和后端的分離。

此外,AJAX技術的流行、Jquery庫的普遍應用,使早期html、Javascript、PHP代碼混寫的情況得到改觀。AJAX技術的應用使數(shù)據(jù)的請求和生成、展示實現(xiàn)了分離,促進了表現(xiàn)層(V)和代碼層的分離。

模板引擎作為視圖層和模型層分離的一種有效解決方案,讓前后端更好的分工協(xié)作。PHP開發(fā)經(jīng)歷了前后端混編,到極力推崇模板引擎(以Smarty為代表),再到如今的回歸自然、甚至質(zhì)疑PHP模板引擎存在的必要性這幾個發(fā)展階段。

2代碼分層的思想

PHP作為輕巧靈活的腳本語言,非常適合Web開發(fā)這種開發(fā)周期短、需求變化快、強調(diào)用戶體驗的需求和業(yè)務。PHP早起開發(fā),通常都是PHP代碼和HTML混寫,代碼中到處可見數(shù)據(jù)庫操作、邏輯判斷、HTML代碼生成,甚至Javascript代碼等。對于小型項目,這種編碼方式能夠很快的完成需求。但是一旦項目擴大后,前端邏輯會越來越復雜,這種完全混寫的方式必將造成代碼可讀性差和后期維護困難等等問題。

在PHP發(fā)展初期,我們可能這么寫:

<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>

顯而易見,對于上述代碼無論是在可讀性、可維護性還是在代碼的復用性上都是極其差的。需要想辦法實現(xiàn)數(shù)據(jù)生成和顯示的分離,通常最容易想到的辦法就是把和數(shù)據(jù)庫打交道的代碼單獨放到一個文件中,顯示數(shù)據(jù)的部分放到另一個文件中。新建文件data.php并獲取數(shù)據(jù),如以下代碼所示:

<?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);
?>

這兩種做法都沒有實現(xiàn)PHP代碼和HTML代碼的分離,但是第二種做法相比第一種做法實現(xiàn)了數(shù)據(jù)獲取和數(shù)據(jù)展示的分離。在第二種處理方法中,其中一個文件專門負責和數(shù)據(jù)庫交互,獲取和處理數(shù)據(jù)。然后交由另一個文件顯示數(shù)據(jù),這個負責顯示的文件只是進行一些簡單的邏輯操作,例如循環(huán)、判斷、輸出等。顯然,第二種處理方式比第一種處理方式更加易于維護。

對于第二種處理方式,我們還可以使用HereDoc語法使其更簡潔,代碼如下所示:

<?php
foreach($dataas$value) {
echo<<< TM
<tr><td>$value[id]</td><td>$value[username]</td></tr>;
TM;
}
?>

第二種處理方式即原生態(tài)的PHP模板機制,是當前一些PHP程序所采用的模板機制,特點就是簡單靈活、符合PHP的語法和使用習慣、學習成本低。缺點就是不能實現(xiàn)一些高級功能,例如實現(xiàn)可配置化、緩存、使得模板文件脫離PHP語法等等。

上述就是小編為大家分享的php模板引擎的作用和用法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI