午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > PHP模版引擎原理、定義與用法實例

PHP模版引擎原理、定義與用法實例

熱門標簽:九江外呼系統 七魚外呼系統停用嗎 阿里云400電話申請加工單 西區企業怎么做地圖標注入駐 保定crm外呼系統運營商 抖音有個地圖標注是什么意思 海南人工外呼系統有效果嗎 地下城堡2圖九地圖標注 智能電話機器人排名前十名南京

本文實例講述了PHP模版引擎原理、定義與用法。分享給大家供大家參考,具體如下:

template存放模版源文件

模版編譯工具類

Compline.class.php

?php
/**
* 模板編譯工具類
*/
class Compile
{
  private $template;     //帶編譯文件
  private $content;      //需要替換的文本
  private $comfile;      //編譯后的文件
  private $left = '{';     //左界定符
  private $right = '}';    //右界定符
  private $value = array();   //值棧
  private $php_turn;
  private $T_P = array();
  private $T_R = array();
  public function __construct($template, $compileFile, $config)
  {
   $this->template = $template;
   $this->comfile = $compileFile;
   $this->content = file_get_contents($template);
   if($config['php_turn'] === false)
   {
     $this->T_P[] = "/\&;(=|php|)(.+?)\&;>/is";
     $this->T_R[] = "lt;? \\1\\2? gt";
   }
   //{$var}
   $this->T_P[] = "/\{\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/";
   //{foreach $b}或者{loop $b}
   $this->T_P[] = "/\{(loop|foreach) \\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/i";
   //{[K|V]}
   $this->T_P[] = "/\{([K|V])\}/";
   //{/foreach}或者{\loop}或者{\if}
   $this->T_P[] = "/\{\/(loop|foreach|if)}/i";
   //{if (condition)}
   $this->T_P[] = "/\{if (.* ?)\}/i";
   //{(else if | elseif)}
   $this->T_P[] = "/\{(else if|elseif) (.* ?)\}/i";
   //{else}
   $this->T_P[] = "/\{else\}/i";
   //{#...# 或者 *...#,注釋}
   $this->T_P[] = "/\{(\#|\*)(.* ?)(\#|\*)\}/";
   $this->T_R[] = "?php echo \$this->value['\\1']; ?>";
   $this->T_R[] = "?php foreach ((array)\$this->value['\\2'] as \$K => \$V) { ?>";
   $this->T_R[] = "?php echo \$\\1; ?>";
   $this->T_R[] = "?php } ?>";
   $this->T_R[] = "?php if (\\1) { ?>";
   $this->T_R[] = "?php }else if (\\2) { ?>";
   $this->T_R[] = "?php }else{ ?>";
   $this->T_R[] = "";
  }
  public function compile()
  {
   $this->c_all();
   $this->c_staticFile();
   file_put_contents($this->comfile, $this->content);
  }
  public function c_all()
  {
   $this->content = preg_replace($this->T_P, $this->T_R, $this->content);
  }
  /**
  * 加入對JavaScript文件的解析
  * @return [type] [description]
  */
  public function c_staticFile()
  {
   $this->content = preg_replace('/\{\!(.* ?)\!\}/', 'script src=\\1'.'?t='.time().'>/script>', $this->content);
  }
  public function __set($name, $value)
  {
   $this->$name = $value;
  }
  public function __get($name)
  {
   if(isset($this->$name))
   {
     return $this->$name;
   }
   else
   {
     return null;
   }
  }
}

Template.class.php

?php
/**
* Template
*/
class Template
{
  private $arrayConfig = array(
   'suffix'   => '.tpl',  //模板的后綴
   'templateDir' => 'template/', //模板所在的文件夾
   'compileDir'  => 'cache/',  //編譯后存放的目錄
   'cache_html'  => true,   //是否需要編譯成靜態的html文件
   'suffix_cache' => '.html',  //設置編譯文件的后綴
   'cache_time'  => 7200,   //設置多長時間自動更新
   'php_turn'  => true,   //設置是否支持php原生代碼
   'debug'     => false,
   );
  public $file;         //模板文件名,不帶路徑
  public $debug = array();     //調試信息
  private $value = array();    //值棧
  private $compileTool;      //編譯器
  private $controlData = array();
  static private $instance = null;  //模板類對象
  public function __construct($arrayConfig = array())
  {
   $this->debug['begin'] = microtime(true);
   $this->arrayConfig = array_merge($this->arrayConfig, $arrayConfig);
   $this->getPath();
   if(!is_dir($this->arrayConfig['templateDir']))
   {
     exit("template dir isn't found!");
   }
   if(!is_dir($this->arrayConfig['compileDir']))
   {
     if(strtoupper(substr(PHP_OS,0,3)) === 'WIN')
     {
      mkdir($this->arrayConfig['compileDir']);
     }
     else
     {
      mkdir($this->arrayConfig['compileDir'], 0770, true);
     }
   }
   include('Compile.class.php');
  }
  public function getPath()
  {
   $this->arrayConfig['templateDir'] = strstr(realpath($this->arrayConfig['templateDir']), '\\', '/').'/';
   $this->arrayConfig['compileDir'] = strstr(realpath($this->arrayConfig['compileDir'])), '\\', '/').'/';
  }
  /**
  * 取得模板引擎的實例
  */
  public static function getInstance()
  {
   if(is_null(self::$instance))
   {
     self::$instance = new Template();
   }
   return self::$instance;
  }
  /**
  * 單獨設置引擎參數
  * 也支持一次性設置多個參數
  */
  public function setConfig($key, $value = null)
  {
   if(is_array($key))
   {
     $this->arrayConfig = $key + $this->arrayConfig;
   }
   else
   {
     $this->arrayConfig[$key] = $value;
   }
  }
  /**
  * 獲取當前模板引擎配置,僅供調試使用
  */
  public function getConfig($key = null)
  {
   if($key  array_key_exists($key, $this->arrayConfig))
   {
     return $this->arrayConfig[$key];
   }
   else
   {
     return $this->arrayConfig;
   }
  }
  /**
  * 注入單個變量
  */
  public function assign($key, $value)
  {
   $this->value[$key] = $value;
  }
  /**
  * 注入數組變量
  */
  public function assignArray($array)
  {
   if(is_array($array))
   {
     foreach ($array as $k => $v) {
      $this->value[$k] = $v;
     }
   }
  }
  /**
  * 獲取模板的位置
  * @return [type] [description]
  */
  public function path()
  {
   return $this->arrayConfig['templateDir'].$this->file.$this->arrayConfig['suffix'];
  }
  /**
  * 判斷配置文件是否要求緩存
  */
  public function needCache()
  {
   return $this->arrayConfig['cache_html'];
  }
  /**
  * 判斷是否需要緩存
  */
  public function reCache($file)
  {
   $flag = false;
   $cacheFile = $this->arrayConfig['compileDir'].md5($file).$this->arrayConfig['suffix_cache'];
   if($this->arrayConfig['cache_html'] === true)
   {
     //需要緩存
     $timeFlag = (time() - @filemtime($cacheFile))  $this->arrayConfig['cache_time'] ? true : false;
     if(is_file($cacheFile)  filesize($cacheFile) > 1  $timeFlag)
     {
      //緩存存在且未過期
      $flag = true;
     }
     else
     {
      $flag = false;
     }
   }
   return $flag;
  }
  /**
  * 展示模板
  */
  public function show($file)
  {
   $this->file = $file;
   if(!is_file($this->path()))
   {
     exit('找不到對應的模板');
   }
   $compileFile = $this->arrayConfig['compileDir'].md5($file).'.php';
   $cacheFile = $this->arrayConfig['compileDir'].md5($file).$this->arrayConfig['suffix_cache'];
   if($this->reCache($file) === false)
   {
     //如果需要緩存
     $this->debug['cached'] = 'false';
     $this->compileTool = new Compile($this->path(), $compileFile, $this->arrayConfig);
     if($this->needCache())
     {
      ob_start();
     }
     extract($this->value, EXTR_OVERWRITE);
     if(!is_file($compileFile) || fileatime($compileFile)  filemtime($this->path()))
     {
      $this->compileTool->value = $this->value;
      $this->compileTool->compile();
      include $compileFile;
     }
     else
     {
      include $compileFile;
     }
     if($this->needCache())
     {
      $message = ob_get_contents();
      file_put_contents($cacheFile, $message);
     }
   }
   else
   {
     readfile($cacheFile);
     $this->debug['cached'] = 'true';
   }
   $this->debug['spend'] = microtime(true) - $this->debug['begin'];
   $this->debug['count'] = count($this->value);
   $this->debug_info();
  }
  public function debug_info()
  {
   if($this->arrayConfig['debug'] === true)
   {
     echo "br/>", '-------------------- debug_info--------------', "br/>";
     echo '程序運行日期:', date("Y-m-d h:i:s"), "br/>";
     echo '模板解析耗時:', $this->debug['spend'], '秒', "br/>";
     echo '模板包含標簽數目:', $this->debug['count'], "br/>";
     echo '是否使用靜態緩存:', $this->debug['cached'], "br/>";
     echo '模板引擎實例參數:', var_dump($this->getConfig());
   }
  }
  /**
  * 清楚緩存的html文件
  * @return [type] [description]
  */
  public function clean()
  {
   if($path === null)
   {
     $path = $this->arrayConfig['compileDir'];
     $path = glob($path.'* '.$this->arrayConfig['suffix_cache']);
   }
   else
   {
     $path = $this->arrayConfig['compileDir'].md5($path).$this->arrayConfig['suffix_cache'];
   }
   foreach ((array)$path as $v) {
     unlink($v);
   }
  }
}

test.php

?php
include 'Template.class.php';
$tpl = new Template(array('debug' => true));
$tpl->assign('data', 'hello world');
$tpl->assign('person', 'htGod');
$tpl->assign('data1', 3);
$arr = array(1,2,3,4,'5',6);
$tpl->assign('b', $arr);
$tpl->show('member');

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP模板技術總結》、《PHP基于pdo操作數據庫技巧總結》、《PHP運算與運算符用法總結》、《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php+mysql開發的最簡單在線題庫(在線做題系統)完整案例
  • PHP實現的pdo連接數據庫并插入數據功能簡單示例
  • 淺談php調用python文件
  • PHP數據對象映射模式實例分析
  • 為Plesk PHP7啟用Oracle OCI8擴展方法總結
  • PHP中ltrim()函數的用法與實例講解
  • 微信小程序學習筆記之表單提交與PHP后臺數據交互處理圖文詳解
  • PHP微商城開源代碼實例
  • PHP簡單驗證碼功能機制實例詳解
  • PHP中md5()函數的用法講解

標簽:涼山 甘肅 昭通 十堰 韶關 遼陽 梅河口 九江

巨人網絡通訊聲明:本文標題《PHP模版引擎原理、定義與用法實例》,本文關鍵詞  PHP,模版,引擎,原理,定義,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP模版引擎原理、定義與用法實例》相關的同類信息!
  • 本頁收集關于PHP模版引擎原理、定義與用法實例的相關信息資訊供網民參考!
  • 推薦文章
    国产精品色在线| 国模私拍视频一区| 97成人在线视频| 欧洲美女免费图片一区| 日韩国产精品毛片| 黄色片在线观看网站| heyzo一本久久综合| 欧美日韩亚洲国产综合| 亚洲999一在线观看www| 一级片免费在线观看视频| 朝桐光av在线一区二区三区| 日韩欧美极品在线观看| 91天堂在线视频| 中文字幕在线观看免费高清| 91亚洲国产成人精品一区二区三| 亚洲午夜av久久乱码| 欧洲精品一区二区三区久久| 91久久国语露脸精品国产高跟| 黑人巨大精品欧美一区免费视频| 91手机在线播放| 伊人久久久久久久久| 国产精品亚洲成人| 午夜精品久久久久久久99| 久久一区二区三区超碰国产精品| 91国内精品野花午夜精品| 免费精品视频一区| 九九热只有精品| 亚洲风情在线资源站| 国产日韩欧美成人| 国产黄在线免费观看| 欧美日韩免费在线| 日产精品一线二线三线芒果| 中国a一片一级一片| 懂色av蜜臀av粉嫩av分享吧最新章节| 91亚洲精品久久久蜜桃| 国产激情综合五月久久| 免费在线观看黄色av| 色综合久久久久综合体| 日韩在线三区| 污视频网站在线播放| 91美女片黄在线观看| 国内成人精品视频| 精品无码在线观看| 欧美性生交xxxxx久久久| 中文字幕日韩精品一区二区| 日日嗨av一区二区三区四区| 色综合亚洲精品激情狠狠| 精品人妻一区二区三区香蕉| 中文字幕第一区第二区| 麻豆av一区| 亚洲欧美日韩成人在线| 欧美黄色三级网站| 99成人在线观看| 亚洲高清免费视频| 欧美两根一起进3p做受视频| 成人丝袜视频网| 久久综合狠狠综合久久综青草| 久久在线观看免费| 狠狠躁夜夜躁人人躁婷婷91 | 成人激情免费在线| 精品国自产拍在线观看| 国产一区二区三区18| 中文字幕无人区二| 日韩欧美亚洲范冰冰与中字| 亚洲永久激情精品| 北岛玲一区二区三区四区| 国产精品一区二区久久久久| 99草在线视频| 国产成人综合亚洲| 天堂国产一区二区三区| 国产精品日韩在线一区| 午夜免费福利视频| 欧美影院在线播放| 久热re这里精品视频在线6| 97中文在线观看| 性xxxx视频| 成人av番号网| 久久精品国产精品亚洲红杏| 国产精品二区在线观看| 国产福利一区二区三区视频| 51xx午夜影福利| 亚洲综合在线第一页| 九九九九九伊人| 日韩免费视频一区二区| 亚洲天堂网av在线| 欧美夫妻性生活视频| 亚洲国产精品suv| 99电影网电视剧在线观看| 国产精品1区二区.| 手机看片日韩国产| 国产在线视频一区二区三区| 欧美h视频在线观看| 亚洲成a人v欧美综合天堂| 欧美xxxx×黑人性爽| 精品国产一区二区三区不卡| av2014天堂网| 在线播放国产精品| 国产小视频一区| 天天久久人人| 在线亚洲一区二区| 日本精品在线免费观看| 日韩免费中文字幕| 国产一区啦啦啦在线观看| 国产欧美精品aaaaaa片| 日韩视频不卡中文| 一级一片免费看| 欧美tickling网站挠脚心| 国产日韩久久久| 女女同性女同一区二区三区91| 日韩精品高清不卡| 女人另类性混交zo| 亚洲人成网站免费播放| 波多野结衣绝顶大高潮| 精品一区二区国产| 欧洲另类一二三四区| 精品无码黑人又粗又大又长| 国产精品盗摄久久久| 久久综合久久99| 中文精品在线观看| 成人黄色中文字幕| 欧美视频在线看| 亚洲精品毛片一区二区三区| 日本在线观看不卡| 91精品国产欧美一区二区18| 888奇米影视| 中国老女人av| 日韩视频免费观看高清完整版 | 中文字幕亚洲欧美日韩在线不卡 | 中国特级黄色大片| 欧美激情免费观看| 欧美国产精品专区| 美国黄色片视频| 成人免费看片网址| 亚洲成av人片在线观看无码| 国产亚洲欧美精品久久久www| 成人性色av| 欧美在线不卡一区| 天堂av在线一区| 成人区人妻精品一区二| 久久频这里精品99香蕉| 亚洲香蕉伊在人在线观| 国产黄色片免费观看| 天堂中文视频在线| 91精品91久久久久久| 亚洲精品欧美在线| www.com在线观看| 国产精品成人免费一区久久羞羞| 91久久精品一区二区别| 欧美在线三级电影| 精品一二线国产| 久草视频在线资源站| 日韩精品视频一区二区在线观看| 奇米影视亚洲狠狠色| 欧美一区二区三区免费观看视频 | 婷婷激情5月天| 不卡一区二区三区四区五区| 欧美一区二区三区免费在线看| 国产成人av一区二区三区在线观看| 日韩成人一区二区三区| 欧美大尺度做爰床戏| 久久国产一区| 久久久久五月天| 欧美无乱码久久久免费午夜一区| 免费成人在线网站| 好吊日在线视频| 免费黄频在线观看| 久久免费一级片| 成人精品aaaa网站| 欧美另类高清videos| 欧美一区二区三区在| 国产精品免费丝袜| 丰满肉肉bbwwbbww| caoporn国产| 好吊操视频这里只有精品| 一区二区三区的久久的视频| 国产成人精品一区二区| 精品在线观看国产| 日本韩国一区二区三区视频| 亚洲国产精品精华液2区45| 少妇高潮一区二区三区99小说| 亚洲熟妇一区二区三区| 日本三级黄色网址| 超薄肉色丝袜足j调教99| 成人欧美一区二区三区在线湿哒哒 | 中文字幕在线网站| 国产亚洲精品久久久久久打不开| 香蕉在线观看视频| 欧美一级片中文字幕| 国风产精品一区二区| 国产精品中文字幕在线| 97在线观看免费| 三级精品视频久久久久| 日本国产一区二区| 国产精品久久久久久福利一牛影视 | 天天干天天插天天操| 糖心vlog精品一区二区| 久久亚洲成人av| 欧美激情视频二区| 99久久精品免费视频| 丰满少妇一区二区三区| 一二三区视频在线观看| 2025韩国理伦片在线观看| 性猛交ⅹ×××乱大交| 九色91popny| 午夜免费一级片| 无码国产69精品久久久久网站| 丰满爆乳一区二区三区| 国产日产欧美视频| 播放灌醉水嫩大学生国内精品| 久久这里只有精品18| www.av蜜桃| 亚洲欧美天堂在线| 欧美深性狂猛ⅹxxx深喉| 亚洲一区二区三区无码久久| 三级网站在线免费观看| www亚洲色图| 国产成人无码精品| 天堂网免费视频| 殴美一级特黄aaaaaa| 奇米精品一区二区三区四区 | 国产97免费视| 国产精品日韩一区二区三区| 日韩精品无码一区二区三区| 国产精品国产亚洲精品看不卡| 和岳每晚弄的高潮嗷嗷叫视频| 国产日韩第一页| 中文字幕日韩综合| 国产亚洲精品熟女国产成人| 日本五十熟hd丰满| 嫩草影院一区二区| 99精品黄色片免费大全| 亚洲综合丝袜美腿| 欧美日韩国产综合视频在线观看| 日韩欧美国产三级电影视频| 久久99热精品| 国产精品视频久| 18视频在线观看娇喘| 精品国产午夜福利在线观看| 一起草在线视频| 欧美亚洲天堂网| 99久久亚洲精品日本无码| 99国内精品久久| 一区二区三区 在线观看视频| 欧美中文字幕一二三区视频| 日韩视频免费在线| 激情久久av| 中文字幕中文在线| 欧美成人片在线观看| 亚洲女同志亚洲女同女播放| 国产精品综合网| 欧美电影一区二区三区| 97国产在线观看| 免费的一级黄色片| 特大黑人巨人吊xxxx| 国产深喉视频一区二区| 国产成人啪午夜精品网站男同| 亚洲精品少妇30p| 久久精品国产一区| 国产中文一区二区| 精品人妻二区中文字幕| 国产精品欧美综合亚洲| 中文字幕日本乱码精品影院| 国产一区av在线| 在线观看亚洲视频啊啊啊啊| 国产麻豆剧传媒精品国产| 亚洲国产精品国自产拍久久| 亚洲欧美日本韩国| 九九视频这里只有精品| 丰满女人性猛交| 成人免费区一区二区三区| 久久这里只有精品6| 日韩精品中文字幕在线| 性欧美18一19内谢| 久久精品人妻一区二区三区| 久久嫩草精品久久久久| 日韩精品一区二区三区视频| 国产欧美日韩一区| 初高中福利视频网站| 九九视频精品免费| 欧美日韩精品一区视频| 国产偷久久久精品专区| 亚洲最大成人网站| 国产精品亚洲综合一区在线观看| 精品视频免费看| 精品欧美一区二区在线观看视频| 亚洲日本久久久| 天天干天天操av| 亚洲人成网在线播放| 中文网丁香综合网| 亚洲一级片免费看| 天天操天天色综合| 欧美日韩三区四区| 中文字幕在线观看成人| 91在线观看下载| 国产成人av在线播放| www.色就是色.com| 国产美女视频一区| 久久精品视频8| 欧美一级高潮片| 亚洲成a人片在线观看中文| 91免费电影网站| 天天操天天射天天爽| 色婷婷综合五月| 女同性恋一区二区| 一本一道人人妻人人妻αv | 亚洲日本视频在线观看| 欧美日韩国产在线| 在线一区高清| 人人精品人人爱| 亚洲久久久久久久久久| 日韩高清第一页| 国产中文字幕精品| 午夜精品一区二区三区av| а天堂中文在线资源| 欧美羞羞免费网站| 国产自产在线视频| 日本视频一区二区三区| 欧美一级大片在线免费观看| 久久久久久天堂| 日韩美女主播在线视频一区二区三区| 欧美少妇性生活视频| av激情综合网| 久久爱av电影| 美女精品一区二区| 国产91精品在线播放| 久久久久久久久久免费视频 | 欧美日韩一区二区三区69堂| 高清久久久久久| 激情视频一区二区| 精品国产伦一区二区三| 欧美精品18videosex性欧美| 久久久久99精品成人片毛片| 91麻豆精品国产自产在线| 欧美性生交xxxxx| 亚洲午夜免费福利视频| 国产免费黄色av| 国产精品视频yy9299一区| 亚洲一区二区三区精品在线观看 | 色在线观看视频| 在线观看视频99| 日韩成人免费在线视频| 久久在线精品视频| 日韩黄色一级视频| 奇米四色中文综合久久| 国内精品久久久久久久久久| 日韩在线精品视频| 亚洲精品77777| 欧美专区在线观看| 久久婷婷av| 欧美日韩另类综合| 久久精品夜夜夜夜久久| 东北少妇不带套对白| 五月婷婷激情综合| 日韩精品在线看| 中文字幕第69页| 日韩av在线天堂网| 中文精品久久久久人妻不卡| 国产精品久久久久久久久久小说 | 久久人人爽人人人人片| 精品视频1区2区| 日韩精品一区二区三| 欧美最顶级丰满的aⅴ艳星| 日韩成人午夜电影| 亚洲一区在线免费| 亚洲国产婷婷综合在线精品| 亚洲欧美色图视频| 中文字幕日韩精品在线| 国产又黄又猛又爽| 欧美日韩免费观看一区| 亚洲国产精品尤物yw在线观看| 欧美人与性动交α欧美精品| 亚洲精品久久久久中文字幕欢迎你| 天干夜夜爽爽日日日日| 国产91社区| 精品少妇theporn| 欧美激情高清视频| 人妻精品无码一区二区| av日韩一区二区三区| 日韩你懂的在线观看| 波多野结衣爱爱| 亚洲高清乱码| 91麻豆精品国产综合久久久久久| 日批视频免费在线观看| 快播日韩欧美| 一区二区欧美在线观看| 国产一二三四区| 国产精品伊人日日| 欧美亚洲综合久久| 国产人妖一区二区| 久久久久免费看黄a片app| 亚洲精品第一国产综合精品| 亚洲三级黄色片| 久久婷婷国产精品| 久久精品亚洲热| 91性感美女视频| 欧美色图校园春色| 久久免费视频在线观看| 国产精品久99| 三级黄色在线观看| 久久精品日韩精品| 在线一区二区视频| 中文字幕日本视频| 一区二区三区四区五区精品 | 中文字幕亚洲欧美在线不卡| 国产精品久久久久久99| 免费网站永久免费观看| 精品少妇v888av| 一区二区三区在线观看动漫| 中文字幕你懂的| 欧美xxxx黑人|