/**
類別名為Smarty是自訂的模板引擎
透過該類別物件載入範本檔案並解析,解析後的結果輸出
*/
class Smarty {
public $template_dir = 'templates'; //定義模板文件存放的目錄
public $compile_dir = 'templates_c'; / /定義透過範本引擎組合後檔案存放目錄
public $left_delimiter = ' public $) ter5;在模板中嵌入動態資料變數的右邊定界符號
private $tpl_vars = array(); //內部使用的臨時變數
) ** tpl_var , $value = null) {
if ($tpl_var != '')
} /**將PHP中分配的值會儲存到成員屬性$tpl_vars中,用於將板中對應的變數進行替換 @param
string$tplvarvar@paramstring$tpl下標,要和模板中的變數名稱對應 @param
mixed
$value需要一個標量類型的值,用來分配給模板中變數的值
需要一個標量類型的值,用來分配給模板中變數的值
* /
function display($fileName) {
/* 到指定的目錄中尋找範本檔案*/
$tplFile處理過的範本檔案不存在,則退出並回報錯誤*/
if(!file_exists($tplFile)) {
die("存在於$t*");
}
/* 取得組合中的範本文件,檔案中的內容都是已取代的*/
_$comFileName = $this->compile_dir.Name/com_ 。 )) {
/* 呼叫內部替換範本方法*/
$repContent = $this->tpl_replace(file_get_contents($tplFile));
/* 存檔由系統組合後的腳本檔案?
file_put_contents($comFileName, $repContent);
}
/* 包含處理後的範本檔案輸出給客戶端*/
include($comFile); }
/**內部使用的私有方法,使用正規表示式將範本檔案''中的語句替換為對應的值或PHP程式碼
@param
string
@param
string
文件中讀入的全部內容字串 @return$repContent回傳替換後的字串
*/private function tpl_replace($content) {
/* 將左右定界符號中,有影響正則的特殊符號轉義 例如,轉義例如, */
$left = preg_quote($this->left_delimiter, '/');
$right = preg_quote($this->right_delimiter, '/');$right = preg_quote($this->right_delimiter, '/');
模板中各種識別符的正規表示式的模式數組*/
$pattern = array(
/* 匹配模板中變數,例如,"" /* 匹配模板中變數,例如,"" /*//
*/ '.$left.'s*$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*'.$right.'/i',
/* 匹配模板中if標識符,例如" " */
'/'.$left.'s* ifs*(.+?)s*'.$right.'(.+?)'.$left.'s*/ifs*'.$right.'/ies',
/* 匹配elseif標識符, 例如"" */
'/'.$left.'s*elses*ifs*(.+?)s*'.$right.'/ies ',
/* 匹配else標識符, 例如"" */
'/'.$left.'s*elses*'.$right.'/is',
/* 用來匹配模板中的loop標識符,用來遍歷數組中的值, 例如" " */
'/'.$left. 's*loops+$(S+)s+$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*'.$right.'(.+?)'.$left .'s*/loops*'.$right.'/is',
/* 用來遍歷數組中的鍵和值,例如" $value }> " */
'/'.$left.'s*loops+$(S+)s+$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s *=>s*$(S+)s*'.$right.'(.+?)'.$left.'s*/loop s*'.$right.'/is',
/* 匹配include標識符, 例如,'' */
'/'.$left.'s*includes+["']?(.+?)["']?s *'.$right.'/ie'
);*
/*中使用正則的表達式
/place
/* 替換模板中的變數tpl_vars["var"]; */
'tpl_vars["${1}"]; ?> ',
/* 替換模板中的if字串 */
'$this->stripvtags('','${2}')',
/* 取代elseif的字串 */'$this->stripvtags('',"")',
/* 替換else的字串 */
'', /* 以下兩個用來取代模板中的loop識別碼為foreach格式*/
'tpl_vars["${1}"] as $this->tpl_vars["$ {2}"]) { ?>${3}',
'tpl_vars["${1}"] as $this->tpl_vars["${2}"] => $this->tpl_vars["$ {3}"]) { ?>${4}',
/*替換include的字串*/
'file_get_contents($this->template_dir."/${1 }")'
);
/* 使用正規替換函數處理 */
$repContent = preg_replace($pattern, $replacement, $content);
/* 如果還有要替換的標識,遞歸調用自己再次替換*/
if(preg_match('/'.$left.'([^('.$right.')]{ 1,})'.$right.'/', $repContent)) {
$repContent = $this->tpl_replace($repContent);
}
/* 返回替換後的字串 */
return $repContent;
}
/**
內部使用的私人方法,用來將條件語句中使用的變數替換為對應的值
@paramstring$expr 提供範本中條件語句的開始標記中條件
string$statement 提供範本中條件語句的結束標記 @return
strin將處理後的條件語句連接後傳回strin*/
<
$ var_pattern = '/s*$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*/is';
/* 將變數替換為值*/
/* 將變數替換為值*/
/* 將變數替換為值*/
$expr = preg_replace($var_pattern, '$this->tpl_vars["${1}"]', $expr);
/* 將開始標記中的引號轉義替換*/
/* 將開始標記中的引號轉義替換*/
$expr = str_replace("\"", """, $expr);
/* 替換語句體和結束標記中的引號*/
$statement = str_replace("\""", """, $" statement);
/* 將處理後的條件語句連接後回傳*/
return $expr.$statement;
}
}
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了php正規表示式—仿smarty,包含了方面的內容,希望對PHP教程有興趣的朋友有幫助。 🎜
🎜
🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31