PHP模版引擎,框架有什麼區別,各有什麼用?


瀉藥。

首先,我谷歌了一下「PHP模板引擎」,得到這樣一個網頁:

序言 | Smarty

兩種觀點

當PHP出現了模板引擎時,就有了兩種觀點: 第一種觀點是:「PHP本身就是模板引擎」。主張在HTML中內使用簡單的PHP代碼。 雖然從純代碼運行觀點來看,這種主張是速度最快的,但有很大的爭議就是內嵌的PHP代碼會 使得HTML凌亂並且非常複雜。

另一種觀點是頁面顯示應該是沒有程序代碼的,轉而用簡單的標籤來顯示內容。 這中主張在別的模板引擎(甚至是其他編程語言)是很常見的,而且也是Smarty的觀點。 這種方式可以讓模板只專註於頁面顯示,避免混合了程序邏輯代碼,更方便管理。

PHP與模板分離的重要性

兩個主要是好處:

  • 語法:模板語法通常是更符合HTML標記的語義。PHP語法可以在程序代碼中運作的很好, 但如何混合在HTML中就不然。Smarty簡單的{標籤}語法是為了表達顯示邏輯而設計的。 Smarty讓你的模板更專註於頁面顯示,而不用關注太多「代碼」。 這可以讓模板開發得更快速,維護更容易。 學習Smarty的語法不需要懂得PHP的相關知識,程序員或非程序員都能很快上手。

  • 松耦合:當PHP代碼混合在模板中,那將無法約束任意的邏輯代碼被寫到模板上。 Smarty分隔了模板和PHP,控制了頁面顯示和業務邏輯的分離。 Smarty還有安全特性,可以令模板源碼有強制的約束。

以上,是引用的原文,怕日後死鏈。我想,這個講解了 Smarty 開發者認為的模板引擎的好處。以下再引用一段:

Smarty不是什麼

Smarty不是一個應用開發框架。Smarty不是一個MVC。Smarty不像Zend Framework, CodeIgniter, PHPCake, 或者其他的PHP應用開發框架。

Smarty是一個模板引擎,在應用程序中,當作V層(視圖層)的組件來使用。 Smarty可以很輕易連接到其他的視圖引擎中。 和其他的軟體技術一樣,Smarty也有著學習曲線。 Smarty不一定保證良好的程序設計或者達成顯示分離的目的,這還得需要開發者和模板設計師的努力。

可見,模板引擎,不是框架,更像是框架的 「V層」。有框架的一部分作用,但是,不是框架。

在我個人的工程實踐中,我從沒使用過任何的模板引擎,所以我並無法理解模板引擎的諸多好處。所幸,我使用過框架,主要使用的是 Web 開發框架。

Web 開發框架,我認為顯然是可以提高程序員的生產效率的,不管一些極端的人認為它犧牲了什麼(諸如「太重」,「性能差」等等幼稚的觀點)。

在我個人的認知里,我更願意稱框架為一種領域語言。致力於解決 Web 開發領域的一般性問題而專門提供的開發組件集合,就可以稱為是 Web 開發框架了。框架,在語言的上層提供了更加高級的抽象元素,幫助程序員更快速度構建一個完整的業務;框架,固化了很多工程實踐領域的最佳實踐方案,幫助程序員少走彎路,直接構建出品質上乘的應用;框架,提供了一整套的約定俗成,幫助互相協作的程序員快速理解團隊每一個成員的編碼意圖,從而能夠更高效率的協同開發和維護一個應用;現代比較新潮的框架(Yii 2.x 或者 Lavarel 等),除了編碼層面,更提供了一整套工程實踐的優秀經驗,如包管理、代碼生成、代碼部署方案、資料庫遷移方案、Log方案等等,能極大程度解放程序員的生產力。

PS:

各種框架琳琅滿目,很多初學者會迷茫,不知選擇為何,我覺得大可不必迷茫,因為主流框架都在趨同,所以逮住一個學透即可。學習框架,重點是理解思想和框架特性設計的原因,不要滿足於會用,做到了的話,哪怕立刻換一個框架,也沒什麼大不了的。並無太高切換成本。


模板引擎是為了php和前端html更好的結合,眾所周知的有Smtray模板引擎。

php框架 為了方便開發,節約工作量,人們把重複的功能寫成函數,使用時直接調用即可,但是一個網站里涉及的函數太多了,需要有序的,優雅的把這些函數規劃和組織起來,用的時候引入並調用,這個規划起來的整體就是框架,如 tp /yii /ci/ laravel 等


推薦閱讀:

從用緩存優化函數性能說說第三方框架的使用
框架到底是個什麼東西?
業界主流的RPC框架有哪些?Dubbo與Hadoop RPC的區別?
想要開發自己的PHP框架需要那些知識儲備?
一名Infrastructure Engineer需要掌握哪些技術?

TAG:PHP | 框架 | PHP框架 | PHP學習 |