日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

smarty 执行php,smarty模板执行原理

發布時間:2024/8/1 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 smarty 执行php,smarty模板执行原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了實現程序的業務邏輯和內容表現頁面的分離從而提高開發速度,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;

使用面向對象技術實現模板功能的封裝代碼如下:

class Template{

//屬性

public $vars; //保存要替換的標記和數據的內容

public $left_delimiter='{*'; //左分隔符

public $right_delimiter='*}'; //右分隔符

//方法

public function assign($key,$value){

$this->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 执行php,smarty模板执行原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。