亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

毛毛蟲教你寫一個屬于自己的模板引擎

2019-11-17 04:21:39
字體:
來源:轉載
供稿:網友

#phpchina首發#

Smarty一直被人視為是多余的東西,我覺得認為Smarty多余的人才是多余的....不說這些了。今天我就教大家寫個Stupid模板引擎是由3個文件組成,他們分別是:stupid.class.php,stupid_parser.class.php,stupid_debugger.class.php。
Stupid.class.php的任務是設置變量,模板路徑,和顯示等功能,而stupid_parser.class.php就是編譯模板文件的,stupid_debugger.class.php是用來調試用的。

好了,我們現在就先編寫stupid.class.php吧。
1.新建一個PHP文件名為:stupid.class.php。
我們的類叫Stupid,我們先設計一下成員變量吧。
成員變量有:$_tpl_vars, $_tpl_file, $_parser, $_debugger;
$_tpl_vars: 用來保存模板變量的;
$_tpl_file: 用來保存模板文件名的;
$_parser: 保存StupidParser對象的,就是編譯對象;
$_debugger: 保存StupidDebug對象的,就是調試對象;

下面定義了兩個常量,用來存放模板文件夾和編譯文件夾的:
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');

開始編碼了>>>

<?php
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');

class Stupid {
       
PRivate $_tpl_vars;
        private $_tpl_file;
        private $_parser;
        private $_debugger;
}
?>

開始寫個構造器吧>>>

public function Stupid() {
  if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
   exit('錯誤:請正確設置模板文件夾和編譯文件夾');
  }
}

在構造器中,我們判斷了模板路徑和編譯路徑是否設置正確.

設計我們的方法
我們這個類中主要有以下方法:
assign(), set_tpl_dir(), set_parsed_dir(), display(), debug().
assign()方法:
assign()的用處是設置模板變量.代碼如下>>>

public function assign($var, $value) {
if(isset($var) && trim($var) != '') {
                $this->_tpl_vars[$var] = $value;
                return true;
        } else {
                exit('錯誤:請設置變量名');
        }
}
我們先判斷用戶是否設置了變量名,用isset($var) && trim($var) != ''來判斷, trim($var) != ''是防止用戶以空格來設置變量名.如果設置變量正確,我們就將他保存到成員變量_tpl_vars中.

display()方法
display()方法是Stupid類中最重要的方法,他是用來顯示和檢測模板是否更新了,更新了就再編譯,沒有更新就用原來編譯之后的文件.

代碼如下>>>

public function display($tpl_file) {
  $template_file = TPL_DIR.$tpl_file;
  if(!file_exists($template_file)) {
   exit('錯誤:模板文件不存在');
  }
 
  $parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
  if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
   require_once './stupid_parser.class.php';
   $this->_parser = new StupidParser();
   $this->_parser->compile($tpl_file);
  }
  include $parsed_file;
}

這個方法是根據!file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file)這條語句來判斷是否編譯過和模板文件是否更新過, 沒有編譯過和更新過模板文件都要重新編譯.我們就要引入stupid_parser.class.php,并創建StupidParser對象,對模板文件進行編譯.編譯完,我們就引入編譯之后的文件.這個編譯之后的模板文件就是一個普通的PHP文件.

debug()方法
Debugg()方法就比較簡單,就是引入stupid_debugger.class.php文件,創建StupidDebuger對象,調用StupidDebuger的start方法進行調試.

代碼如下>>>

public function debug ($tpl_file) {
        if (include_once("stupid_debugger.class.php")) {
                $this->_debugger = new StupidDebugger(TPL_DIR. $tpl_file);
                $this->_debugger->start();
        } else {
                exit( '錯誤:Debuger類文件不存在');
        }
}

至此,我們的Stupid類就寫完了!下次我要介紹StupidParser類的編寫.請繼續支持.大家有什么意見或者建議可以提出!

show show全相:

<?php
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
class Stupid {
private $_tpl_vars;
private $_tpl_file;
private $_parser;
private $_debug;

public function Stupid() {
  if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
   exit('錯誤:請正確設置模板文件夾和編譯文件夾');
  }
}

public function assign($var, $value) {
  if(isset($var) && trim($var) != '') {
   $this->_tpl_vars[$var] = $value;
   return true;
  } else {
   exit('錯誤:請設置變量名');
  }
}

public function display($tpl_file) {
  $template_file = TPL_DIR.$tpl_file;
  if(!file_exists($template_file)) {
   exit('錯誤:模板文件不存在');
  }
 
  $parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
  if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
   require_once './stupid_parser.class.php';
   $this->_parser = new StupidParser();
   $this->_parser->compile($tpl_file);
  }
  include $parsed_file;
}

function debug($tpl_file) {
  if (include_once("stupid_debugger.class.php")) {
   $this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
   $this->_debugger->start();
  } else {
   exit( '錯誤:Debuger類文件不存在');
  }
}
}
?>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线直播| 国产亚洲人成网站在线观看| 国产精品pans私拍| 日韩激情视频在线播放| 欧美精品福利视频| 久久噜噜噜精品国产亚洲综合| 最近中文字幕日韩精品| 欧美www视频在线观看| 欧美成人午夜激情| 国产综合久久久久| 久久久国产成人精品| 91美女片黄在线观| 91精品国产电影| 人人澡人人澡人人看欧美| 91性高湖久久久久久久久_久久99| 最近2019中文免费高清视频观看www99| 欧美激情综合亚洲一二区| 韩国一区二区电影| 久久成年人视频| 欧美日韩精品在线观看| 日韩电影在线观看永久视频免费网站| 国产一区红桃视频| 丝袜一区二区三区| 色樱桃影院亚洲精品影院| 成人免费直播live| 久久久亚洲欧洲日产国码aⅴ| 国产精品久久一区主播| 成人激情春色网| 久久久精品国产| 色偷偷偷综合中文字幕;dd| 精品久久久久久亚洲国产300| 91精品免费视频| 精品久久久久久久久久ntr影视| 亚洲美女精品久久| 欧美大尺度激情区在线播放| www.久久久久| 成人做爽爽免费视频| 欧美天堂在线观看| 91精品视频在线| 18一19gay欧美视频网站| 国产午夜精品免费一区二区三区| 欧美专区第一页| 亚洲成人av片在线观看| 韩曰欧美视频免费观看| 亚洲欧美制服综合另类| 亚洲第一av网| 欧美人与物videos| 亚洲国产成人在线播放| 国产精品一区二区在线| 精品国内产的精品视频在线观看| 综合网中文字幕| 日韩av在线网址| 国产精品影院在线观看| 久久精品久久久久电影| 中文字幕久热精品在线视频| 中文字幕精品久久| 欧美成人精品一区二区| 欧美激情精品久久久久久黑人| 亚洲男人天堂手机在线| 中文字幕国产亚洲2019| 精品久久久久久久久久| 91在线观看欧美日韩| 91免费精品国偷自产在线| 日韩精品免费在线观看| 日韩网站在线观看| 精品国产视频在线| 亚洲无限av看| 在线播放国产一区中文字幕剧情欧美| 亚洲一区av在线播放| 亚洲最新av在线网站| 欧美人与物videos| 久久久噜噜噜久久| 青青草一区二区| 亚洲免费电影一区| 欧美视频在线观看免费网址| 高清一区二区三区四区五区| 亚洲成色777777女色窝| 亚洲精品一区av在线播放| 久久精品一本久久99精品| 欧美电影免费观看| 色综合导航网站| 亚洲午夜精品久久久久久久久久久久| 最新69国产成人精品视频免费| 亚洲精品aⅴ中文字幕乱码| 成人激情视频在线播放| 久久久噜噜噜久久中文字免| 亚洲欧美激情视频| 欧美孕妇孕交黑巨大网站| 国内精品久久久久久久久| 国产午夜精品一区二区三区| 日韩在线免费视频| 日韩**中文字幕毛片| 亚洲欧洲在线播放| 久久亚洲私人国产精品va| 亚洲美女免费精品视频在线观看| 亚洲国产精品专区久久| 成人在线一区二区| 8x海外华人永久免费日韩内陆视频| 久久成人精品视频| 亚洲电影天堂av| 伊人久久大香线蕉av一区二区| 欧美日本亚洲视频| 国产日韩中文字幕在线| 永久免费看mv网站入口亚洲| 亚洲成人黄色在线观看| 国产精品自产拍高潮在线观看| 亚洲午夜久久久久久久| 欧美—级高清免费播放| 日韩少妇与小伙激情| 国内精品免费午夜毛片| 亚洲精品www| 欧美成人手机在线| 国产精品久久久久久av| 欧美成人免费观看| 国产经典一区二区| 伊人青青综合网站| 黄色一区二区在线| 久久韩剧网电视剧| 91探花福利精品国产自产在线| 91免费在线视频网站| 亚洲香蕉成人av网站在线观看| 日韩动漫免费观看电视剧高清| 欧美肥臀大乳一区二区免费视频| 欧美黑人极品猛少妇色xxxxx| 国产一区二区免费| 成人乱人伦精品视频在线观看| 国产视频综合在线| 91性高湖久久久久久久久_久久99| 欧美精品一区二区三区国产精品| 久久久久久久久中文字幕| 日韩av在线免费观看一区| 91麻豆国产语对白在线观看| 亚洲永久在线观看| 欧美色另类天堂2015| 中文字幕欧美亚洲| 精品视频9999| 欧美日韩中文字幕在线视频| 亚洲夜晚福利在线观看| 亚洲变态欧美另类捆绑| 国产欧美日韩精品丝袜高跟鞋| 国产激情综合五月久久| 日本亚洲欧美成人| 色综合导航网站| 97超碰蝌蚪网人人做人人爽| 2020久久国产精品| 国产主播喷水一区二区| 日韩人体视频一二区| 韩国视频理论视频久久| 成人高h视频在线| 亚洲sss综合天堂久久| 91欧美精品午夜性色福利在线| 精品小视频在线| 亚洲人午夜色婷婷| 国产成人91久久精品| 91精品综合久久久久久五月天| 亚洲国产小视频| 日韩有码片在线观看| 久久久久久久91| 国产精品第七影院| 欧美精品在线观看| 亚洲毛片在线观看| 日韩精品中文字幕在线| 国产一区二区激情| 色yeye香蕉凹凸一区二区av|