Smarty的主要設計理念是:乾淨的分離顯示邏輯和程序代碼,在PHP爲後端狀況下,Smarty模板應用在前端,加強PHP的先後端交互性能,而且給先後端分離狀況下程序員的開發、部署帶來方便,語法簡單易懂,即便不懂PHP也徹底能夠掌握Smarty。前端
有人會說,爲何不直接用PHP進行前臺渲染?
PHP與模板分離的重要性程序員
語法:模板語法一般是更符合HTML標記的語義。PHP語法能夠在程序代碼中運做的很好, 但如何混合在HTML中就否則。Smarty簡單的{標籤}語法是爲了表達顯示邏輯而設計的。 Smarty讓你的模板更專一於頁面顯示,而不用關注太多「代碼」。 這可讓模板開發得更快速,維護更容易。 學習Smarty的語法不須要懂得PHP的相關知識,程序員或非程序員都能很快上手。後端
鬆耦合:當PHP代碼混合在模板中,那將沒法約束任意的邏輯代碼被寫到模板上。 Smarty分隔了模板和PHP,控制了頁面顯示和業務邏輯的分離。 Smarty還有安全特性,能夠令模板源碼有強制的約束。緩存
頁面設計者和PHP安全
一個一般的問題是:「頁面設計者既然要學一門語法,爲何不學PHP?」。固然頁面設計者能夠 學習PHP,並且他們可能已經很是熟悉PHP。問題並不是是他們是否有能力學習PHP,問題在於HTML混合PHP的狀況,若是設計者使用PHP,那麼就很容易會將一些不屬於模板的PHP代碼寫到模板上。 (正如當他們只須要一把小刀但你塞給他們一把瑞士軍刀同樣)。 你能夠教導他們程序設計的規則,但這多是他們不真正須要學習的事情(他們不是開發者)。 並且PHP手冊也是很是繁多難以篩選出你須要的部分進行教導, 就像你給了車子的買主一本汽車工廠裏面的裝配手冊,而不是汽車的操做手冊同樣。 Smarty恰到好處地給予了設計者須要的工具,而提供了開發者更好地控制這些工具的方法。 這種簡單的標籤語法也是很是受到設計者的歡迎,幫助了設計者流水式地組織管理模板。框架
一句話歸納:Smarty是一個PHP的模板引擎前後端分離
更準確的說:Smarty能夠更好的幫助開發者分離程序邏輯和頁面顯示,如在先後端分離的項目中,先後端爲不一樣開發人員,那麼Smarty即可以作到在互相不影響的狀況下完美的實現先後臺的協做。而且業務邏輯和顯示邏輯分離,是Smarty的一個設計理念。
很是快速。函數
比PHP內嵌到HTML中的作法要有效率的多。工具
比PHP內嵌到HTML中的作法要有效率的多。性能
無模板解析的開銷,只編譯一次。
僅當模板文件被修改後纔會聰明地從新編譯。
你能夠很容易建立本身的函數和變量修飾器,很是具備可擴展性。
可配置的模板定界符語法{delimiter}, 你可使用{$foo}, {{$foo}}, <!--{$foo}-->等等。
條件判斷語句 {if}..{elseif}..{else}..{/if} 會直接使用PHP解析,因此{if...}後能夠是簡單或者較複雜的表達式。
支持無限的 sections, if等的嵌套。
內置緩存支持。
任意的模板源。
模板繼承 能夠輕鬆管理模板和內容。
在底層,Smarty「編譯」(簡單地複製和轉換)模板爲PHP代碼。這在每一個模板第一次調用時發生,而後編譯後的代碼將被一直使用。Smarty處理地很是的好,因此模板設計師僅編輯模板而不須要關注編譯的事情。這方法保持了模板的易維護,同時也保證了運行時是PHP代碼的方式運行,這樣PHP代碼就能夠經過相似APC等OP-CODE緩存器來加速了。
Smarty不是一個應用開發框架。Smarty不是一個MVC。Smarty不像Zend Framework, CodeIgniter, PHPCake, 或者其餘的PHP應用開發框架。
Smarty是一個模板引擎,在應用程序中,看成V層(視圖層)的組件來使用。 Smarty能夠很輕易鏈接到其餘的視圖引擎中。 和其餘的軟件技術同樣,Smarty也有着學習曲線。 Smarty不必定保證良好的程序設計或者達成顯示分離的目的,這還得須要開發者和模板設計師的努力。