現在有很多 PHP 模板引擎,並且有不同的範本語言,我一直想不通這樣能帶來多大的好處,所以我想聽聽大家的意見。
回複內容:
以前 PHP 的 OO 特性不太好,沒有一些優雅的技術手段來將應用邏輯和展示分開,所以發展出了很多模板技術。但現在得益於對 OO 特性的支援,MVC 架構的流行,已經可以丟掉模板引擎了(基於曆史原因除外)。Zend Framework 更是直接推薦使用原生 PHP 指令碼作為模板引擎,因為 PHP 本來就支援代碼與 HTML 的混合書寫,同時開發人員也更不需要學習新的模板文法。 以前對模版引擎,我也覺得沒多大意義,畢竟這事php自己也可以做的很好
但看了twig這款模版引擎之後,我的觀點有了些許變化
這款模版引擎在我看來最大的好處就是可以提高套模板的效率
簡潔的文法,常用的標籤、過濾器、函數,又方便擴充。總之,套模板再也不用寫那冗長的php代碼了。
要是php也能出個coffeescript就好了。 MVC分開的話,V已經沒有意義跑模版引擎了,原生最好。
以前主要是代碼分離,方便前端開發。 個人認為模版引擎對於php還是有必要的。
- 安全,比如預設轉義輸出
- 規範,防止團隊中有人在視圖中寫大量的邏輯代碼
- 效能,據說可以提高效能
- 可讀,個人認為twig或者laravel的blade引擎比php可讀性好
個人一直持反對模板引擎的觀點。
主要是PHP本身已經可以實現模板引擎的功能了。或者說PHP本身就是一個模板引擎。至於給非後端人員使用,其實這事也有點牽強。確實直接使用PHP書寫模板容易引起一些不規範的操作,但是這事其實是靠規範約束的,不是靠技術架構約束的,幾乎所有的模板引擎都提供了運行原生代碼的能力,頁面開發人員遇到繞不過去的點仍然會使用原生的PHP代碼,然後一樣可以埋雷。
良好的規範、共識和review機制來解決這類問題更有效。PHP本身就是一個非常隨意的語言,你可以在任何地方取得很多模組本不應該做的事。MVC為瞭解耦,但是仍然很多人在model和view裡讀$_GET,在controller甚至view裡寫sql。在controller和model裡寫html。這種事一個MVC根本搞不定,否則這個MVC就是一個不具有普適性的MVC了。
綜其原因,原生解決不了的問題,模板一樣解決不了,而且還要增加學習成本和開發成本,承擔不易調試的麻煩,模板引擎本身有bug的風險,多解決一個依賴的成本等等。 模板設計的意義也是目的就是為了程式邏輯與頁面展現分離,便於程式員和美工分工協作而又不會互相干擾。
然而早期的PHP模板實際上是按照程式員的思維邏輯產生的一套機制,在這種機制下,包括在現在所謂的“原生”機制下,頁面美工仍然需要面對包含著大量代表程式邏輯的html。不能算作是徹底的分離。
要說意義有多大,相對於曾經的ASP社區,PHP社區至少一直在努力探索著這一Web開發的核心問題,推動著這一問題的不斷思考和挖掘。
要真正搞好Web開發的MVC分離,不能只站在程式員的角度思考問題,必須考慮Web開發的全程工作分工,分工清晰了,分離的方案就容易確定。