成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP模板引擎的原理與實(shí)踐

elina / 2824人閱讀

摘要:模板文件前端開(kāi)發(fā)者將前端代碼中的所有數(shù)據(jù)替換成與服務(wù)端開(kāi)發(fā)者約定好的標(biāo)簽及變量名。聲明本文是學(xué)習(xí)核心技術(shù)與最佳實(shí)踐列旭松陳文著第章模板引擎的原理與實(shí)踐學(xué)習(xí)筆記。

0x00 模板引擎的原理

模板引擎就是在模板文件中使用一系列提前約定好的標(biāo)簽代替原生PHP代碼,通過(guò)訪問(wèn)一個(gè)PHP的入口文件,會(huì)有一個(gè)PHP編譯文件根據(jù)約定替換模板內(nèi)標(biāo)簽以及標(biāo)簽內(nèi)變量,最終將模板文件編譯成一個(gè)PHP文件,然后展示到瀏覽器中。

模板文件

前端開(kāi)發(fā)者將前端代碼中的所有數(shù)據(jù)替換成與服務(wù)端開(kāi)發(fā)者約定好的標(biāo)簽及變量名。

PHP入口文件

服務(wù)端開(kāi)發(fā)者將前端代碼中所需要的變量注入到前端。

PHP編譯文件

該文件中是模板引擎中的核心,在這里我們定義了 標(biāo)簽 語(yǔ)句 等,通過(guò)讀取模板文件,使用正則表達(dá)式去匹配模板文件中與后臺(tái)約定好的標(biāo)簽及變量,并將標(biāo)簽及變量替換成PHP代碼,最終生成一個(gè)前后端結(jié)合的PHP文件。

0x01 約定標(biāo)簽

PHP的語(yǔ)法中,包括 if...else foreach 等語(yǔ)法,以及需要替換的普通變量 $value , PHP原生語(yǔ)句,注釋等等。一般情況下,大家習(xí)慣使用以下標(biāo)簽

{$value}
// 對(duì)應(yīng)原生
{foreach $array}
    {V}
{/foreach}
// 對(duì)應(yīng)原生
 $V) {
    echo $V;
}
?>
{if $data == "XiaoMing"}
    I"m XiaoMing;
{else if $data == "XiaoHong" }
    I"m XiaoHong;
{else}
    I"m XiaoLi;
{/if}
// 對(duì)應(yīng)原生

等等,這些大家可以參考 Smarty Discuz 的標(biāo)簽。

0x02 構(gòu)造正則表達(dá)式匹配標(biāo)簽及變量 

正則表達(dá)式30分鐘入門(mén)教程

對(duì)于正則表達(dá)式,大家可以戳進(jìn)上面的教程,簡(jiǎn)單易用。
下面直接給出相關(guān)標(biāo)簽的正則表達(dá)式。

// 匹配的正則表達(dá)式
$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}

// 對(duì)應(yīng)的替換內(nèi)容
$this->T_R[] = "value["1"]; ?>";
$this->T_R[] = "value["1"] as $K => $V) { ?>";
$this->T_R[] = "";
0x03 對(duì)模板文件進(jìn)行編譯

編譯就是對(duì)模板文件讀取,使用正則表達(dá)式對(duì)模板標(biāo)簽及變量進(jìn)行替換,最終將替換后的內(nèi)容保存在一個(gè)PHP文件中即可。

使用的相關(guān)函數(shù):

0x04 結(jié)束并聲明

通過(guò)這三步,一個(gè)簡(jiǎn)單的模板引擎就已經(jīng)制作成功了,但是模板引擎的工作原理上面已經(jīng)說(shuō)過(guò)了,在進(jìn)行正則匹配替換的過(guò)程中,效率極低,PHP自身效率本來(lái)就很低,在加上正則匹配,就可想而知了。所以,一般情況下,模板引擎都會(huì)有自己的緩存機(jī)制,將解析成功的內(nèi)容保存成一個(gè)html文件,并設(shè)置緩存有效期,這樣可以很大程度上提升效率。

聲明

本文是學(xué)習(xí)《PHP核心技術(shù)與最佳實(shí)踐》列旭松 陳文著 第6章 PHP模板引擎的原理與實(shí)踐 學(xué)習(xí)筆記。
感謝作者!

原創(chuàng)文章,轉(zhuǎn)載時(shí)必須以超鏈接的形式注明作者和原始出處。 | 作者 : 我才是二亮

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21081.html

相關(guān)文章

  • PHP小知識(shí)點(diǎn)

    摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過(guò)程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...

    hover_lew 評(píng)論0 收藏0
  • Laravel 模板引擎(Blade)原理簡(jiǎn)析

    摘要:上次提到過(guò),模板引擎一般是要做三件事情變量值的輸出條件判斷和循環(huán)引入或繼承其他文件現(xiàn)在就來(lái)看看的模板引擎是如何來(lái)處理這三件事情的。引擎接下來(lái)就是本文的重點(diǎn)是如何編譯的。如果有興趣的話,也可以實(shí)現(xiàn)一個(gè)自己的模板解析引擎。 上次提到過(guò),模板引擎一般是要做三件事情: 變量值的輸出(echo) 條件判斷和循環(huán)(if ... else、for、foreach、while) 引入或繼承其他文件 ...

    vvpvvp 評(píng)論0 收藏0
  • PHP模板引擎

    摘要:程序如果沒(méi)有被和包起來(lái),就會(huì)直接輸出。當(dāng)一個(gè)文件被包含時(shí),語(yǔ)法解析器在目標(biāo)文件的開(kāi)頭脫離模式并進(jìn)入模式,到文件結(jié)尾處恢復(fù)。由于此原因,目標(biāo)文件中需要作為代碼執(zhí)行的任何代碼都必須被包括在有效的起始和結(jié)束標(biāo)記之中。 PHP模板引擎的由來(lái) 為了解決當(dāng)時(shí)混合開(kāi)發(fā)WEB應(yīng)用出現(xiàn)的一系列問(wèn)題:代碼難維護(hù),代碼不可重用,程序員要求知識(shí)廣等問(wèn)題 實(shí)現(xiàn)后端與前端不完全分離,開(kāi)發(fā)與美工可以分工合作,提高...

    eechen 評(píng)論0 收藏0
  • 前端模板原理實(shí)現(xiàn)

    摘要:套頁(yè)面的過(guò)程實(shí)際就是將靜態(tài)頁(yè)面變成切割成一塊塊,每一塊都是一個(gè),或文件,它們是后端模板引擎的處理對(duì)象其實(shí)模板是不局限于后端還是前端的,模板的本質(zhì)是用于從數(shù)據(jù)變量到實(shí)際的視覺(jué)表現(xiàn)代碼這項(xiàng)工作的一種實(shí)現(xiàn)手段。 時(shí)下流行什么react, avalon, angular, vue什么,其核心都離不開(kāi)前端模板。理解前端模板,是我們了解MV* 的關(guān)鍵。 前端框架最重要的目的是將頁(yè)面渲染出來(lái)。渲染...

    galois 評(píng)論0 收藏0
  • PHPer 面試指南-擴(kuò)展閱讀資源整理

    摘要:前端篇收集的前端面試題和答案前端開(kāi)發(fā)面試題史上最全的前端面試題匯總及答案前端工程師手冊(cè)協(xié)議工作原理協(xié)議運(yùn)行機(jī)制的概述協(xié)議篇原理原理解析的工作原理與的區(qū)別理解后端篇年的面試總結(jié)垃圾回收機(jī)制面向?qū)ο笤O(shè)計(jì)淺談?wù)f清楚是什么和的區(qū)別索引原理及慢查 前端篇 收集的前端面試題和答案 前端開(kāi)發(fā)面試題 史上最全的web前端面試題匯總及答案 前端工程師手冊(cè) HTTP協(xié)議:工作原理 SSL/TLS協(xié)議運(yùn)行...

    wemall 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<