摘要:模板文件前端開發者將前端代碼中的所有數據替換成與服務端開發者約定好的標簽及變量名。聲明本文是學習核心技術與最佳實踐列旭松陳文著第章模板引擎的原理與實踐學習筆記。
0x00 模板引擎的原理
模板引擎就是在模板文件中使用一系列提前約定好的標簽代替原生PHP代碼,通過訪問一個PHP的入口文件,會有一個PHP編譯文件根據約定替換模板內標簽以及標簽內變量,最終將模板文件編譯成一個PHP文件,然后展示到瀏覽器中。
模板文件前端開發者將前端代碼中的所有數據替換成與服務端開發者約定好的標簽及變量名。
PHP入口文件服務端開發者將前端代碼中所需要的變量注入到前端。
PHP編譯文件該文件中是模板引擎中的核心,在這里我們定義了 標簽 語句 等,通過讀取模板文件,使用正則表達式去匹配模板文件中與后臺約定好的標簽及變量,并將標簽及變量替換成PHP代碼,最終生成一個前后端結合的PHP文件。
0x01 約定標簽PHP的語法中,包括 if...else foreach 等語法,以及需要替換的普通變量 $value , PHP原生語句,注釋等等。一般情況下,大家習慣使用以下標簽
{$value} // 對應原生
{foreach $array} {V} {/foreach} // 對應原生 $V) { echo $V; } ?>
{if $data == "XiaoMing"} I"m XiaoMing; {else if $data == "XiaoHong" } I"m XiaoHong; {else} I"m XiaoLi; {/if} // 對應原生
等等,這些大家可以參考 Smarty Discuz 的標簽。
0x02 構造正則表達式匹配標簽及變量正則表達式30分鐘入門教程
對于正則表達式,大家可以戳進上面的教程,簡單易用。
下面直接給出相關標簽的正則表達式。
// 匹配的正則表達式 $this->T_P[] = "#{$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)}#"; // 匹配普通變量 $this->T_P[] = "#{foreach $([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)}#"; // 匹配{foreach $array} $this->T_P[] = "#{/(foreach|if)}#"; // 匹配{/foreach} or {/if} // 對應的替換內容 $this->T_R[] = "value["1"]; ?>"; $this->T_R[] = "value["1"] as $K => $V) { ?>"; $this->T_R[] = "";0x03 對模板文件進行編譯
編譯就是對模板文件讀取,使用正則表達式對模板標簽及變量進行替換,最終將替換后的內容保存在一個PHP文件中即可。
使用的相關函數:
0x04 結束并聲明通過這三步,一個簡單的模板引擎就已經制作成功了,但是模板引擎的工作原理上面已經說過了,在進行正則匹配替換的過程中,效率極低,PHP自身效率本來就很低,在加上正則匹配,就可想而知了。所以,一般情況下,模板引擎都會有自己的緩存機制,將解析成功的內容保存成一個html文件,并設置緩存有效期,這樣可以很大程度上提升效率。
聲明本文是學習《PHP核心技術與最佳實踐》列旭松 陳文著 第6章 PHP模板引擎的原理與實踐 學習筆記。
感謝作者!
原創文章,轉載時必須以超鏈接的形式注明作者和原始出處。 | 作者 : 我才是二亮
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21081.html
摘要:上次提到過,模板引擎一般是要做三件事情變量值的輸出條件判斷和循環引入或繼承其他文件現在就來看看的模板引擎是如何來處理這三件事情的。引擎接下來就是本文的重點是如何編譯的。如果有興趣的話,也可以實現一個自己的模板解析引擎。 上次提到過,模板引擎一般是要做三件事情: 變量值的輸出(echo) 條件判斷和循環(if ... else、for、foreach、while) 引入或繼承其他文件 ...
摘要:套頁面的過程實際就是將靜態頁面變成切割成一塊塊,每一塊都是一個,或文件,它們是后端模板引擎的處理對象其實模板是不局限于后端還是前端的,模板的本質是用于從數據變量到實際的視覺表現代碼這項工作的一種實現手段。 時下流行什么react, avalon, angular, vue什么,其核心都離不開前端模板。理解前端模板,是我們了解MV* 的關鍵。 前端框架最重要的目的是將頁面渲染出來。渲染...
摘要:前端篇收集的前端面試題和答案前端開發面試題史上最全的前端面試題匯總及答案前端工程師手冊協議工作原理協議運行機制的概述協議篇原理原理解析的工作原理與的區別理解后端篇年的面試總結垃圾回收機制面向對象設計淺談說清楚是什么和的區別索引原理及慢查 前端篇 收集的前端面試題和答案 前端開發面試題 史上最全的web前端面試題匯總及答案 前端工程師手冊 HTTP協議:工作原理 SSL/TLS協議運行...
閱讀 5035·2021-07-25 21:37
閱讀 682·2019-08-30 15:53
閱讀 3350·2019-08-29 18:47
閱讀 686·2019-08-29 15:39
閱讀 2130·2019-08-29 13:12
閱讀 1796·2019-08-29 12:43
閱讀 2977·2019-08-26 11:52
閱讀 1889·2019-08-26 10:15