smarty模板執行原理_PHP教程

來源:互聯網
上載者:User
為了實現程式的商務邏輯和內容表現頁面的分離從而提高開發速度,php 引入了模板引擎的概念,php 模板引擎裡面最流行的可以說是smarty了,smarty因其功能強大而且速度快而被廣大php web開發人員所認可。本文將記錄一下smarty模板引擎的工作執行原理,算是加深一下理解。

其實所有的模板引擎的工作原理是差不多的,無非就是在php程式裡面用正則匹配將模板裡面的標籤替換為php代碼從而將兩者混合為一個php的混編檔案,然後執行這個混編檔案。基本上就是這麼回事兒了。下面以smarty為例說下這個過程。

例如本站文章頁面:http://www.phpernote.com/article.php?id=795

一般處理過程是這樣的:

html模板頁面部分代碼(article.html):

{subject}{content}

php頁面邏輯部分代碼:

$subject='smarty視頻教程分享';$content='smarty視頻教程分享,下面是具體的下載地址,有需要的朋友可以看看,對smarty模板講解的非常詳細,作者粗略看了一下目錄,真是詳細到細枝末節該......';$str=file_get_contents('article.html');$str=str_replace('{subject}',$subject,$str);$str=str_replace('{content}',$content,$str);echo $str;

使用物件導向技術實現模板功能的封裝代碼如下:

vars[$key]=$value;}public function display($file){//file表示模板名$str=file_get_contents($file);//從模板中讀取多有內容,並將內容放入$str中foreach ($this->vars as $key => $value){ //$key 鍵名(模板標記) $value 值$str=str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);}echo $str;//file_put_contents('bak.html', $str);}}

注意:assign(‘name’,’zhangsan’);這句的時候其實還沒有進行資料替換,而是把傳入的資料儲存在vars[]中,當display的時候才進行資料替換。

smarty的處理過程:

1、 smarty將php源檔案,首先編譯成中間檔案

2、 如果啟用緩衝,再根據編譯檔案產生快取檔案

3、 之後每次訪問都會訪問編譯檔案

如果啟用快取檔案而且有快取檔案並且快取檔案沒有到期,則直接存取快取檔案(先不考慮緩衝的時候的流程)編譯檔案裡時間戳記錄模板檔案修改時間,如果模板被修改過就可以檢測到,然後重新編譯。

(編譯是把靜態內容儲存起來,動態內容根據傳入的參數不同而不同)

讀取編譯檔案省去了讀模數板檔案,和字串替換的時間,所以可以更快。

第一次請求article.php時候編譯,產生編譯檔案,在編譯檔案裡。

第二次請求article.php的時候,判斷模板檔案是否改變,如果模板檔案已改變,那麼去讀模數板檔案,然後再編譯,如果沒有改變,則去讀取編譯檔案,編譯檔案最終輸出;

緩衝預設是關閉的;緩衝是把資料徹底的存在快取檔案裡,直到快取檔案到期才會重新來緩衝;所以說smarty在一些即時性特彆強的網站裡不是特別合適;

對於以上文字可以抽象的理解為下面的一幅圖,讀者自己去體會吧!

考慮緩衝:

在smarty程式裡,判斷是否開啟了快取檔案,並且快取檔案沒有到期,,就去找快取檔案,如果沒有開啟快取檔案,就去判斷模板檔案,如果快取檔案已到期,也是去判斷模板檔案。

您可能感興趣的文章

  • smarty 模板中迴圈表格補充不全的td
  • smarty模板中for迴圈的擴充外掛程式
  • smarty模板中如何產生隨機數
  • smarty模板中判斷數組為空白的方法
  • 程式中通過define定義的常量如何在smarty模板中使用
  • smarty模板中使用php函數以及smarty模板中如何對一個變數使用多個函數
  • smarty模板中給資訊添加最新標籤
  • smarty模板保留變數總結

http://www.bkjia.com/PHPjc/764079.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/764079.htmlTechArticle為了實現程式的商務邏輯和內容表現頁面的分離從而提高開發速度,php 引入了模板引擎的概念,php 模板引擎裡面最流行的可以說是smarty了...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.