首页 > 作文

PHP模版引擎原理、定义与用法实例

更新时间:2023-04-07 09:38:32 阅读: 评论:0

本文实例讲述了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'] === fal)   {     $this->t_p[] = "/<\?(=|php|)(.+?)\?>/is";     $this->t_r[] = "<? \\? >";   }   //{$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";   //{(el if | elif)}   $this->t_p[] = "/\{(el if|elif) (.* ?)\}/i";   //{el}   $this->t_p[] = "/\{el\}/i";   //{#...# 或者 *...#,注释}   $this->t_p[] = "/\{(\#|\*)(.* ?)(\#|\*)\}/";   $this->t_r[] = "<?php echo $this->value['\']; ?>";   $this->t_r[] = "<?php foreach ((array)$this->value['\'] as $k => $v) { ?>";   $this->t_r[] = "<?php echo $\; ?>";   $this->t_r[] = "<?php } ?>";   $this->t_r[] = "<?php if (\) { ?>";   $this->t_r[] = "<?php }el if (\) { ?>";   $this->t_r[] = "<?php }el{ ?>";   $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=\'.'?t='.time().'></script>', $this->content);  }  public function __t($name, $value)  {   $this->$name = $value;  }  public function __get($name)  {   if(ist($this->$name))   {     return $this->$name;   }   el   {     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'     => fal,   );  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']);     }     el     {      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(lf::$instance))   {     lf::$instance = new template();   }   return lf::$instance;  }  /**  * 单独设置引擎参数  * 也支持一次性设置多个参数  */  public function tconfig($key, $value = null)  {   if(is_array($key))   {     $this->arrayconfig = $key + $this->arrayconfig;   }   el   {     $this->arrayconfig[$key] = $value;   }  }  /**  * 获取当前模板引擎配置,仅供调试使用  */  public function getconfig($key = null)  {   if($key && array_key_exists($key, $this->arrayconfig))   {     return $this->arrayconfig[$key];   }   el   {     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 = fal;   $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 : fal;     if(is_file($cachefile) &三十七种漂亮发型编法& filesize($cachefile) > 1 && $timeflag)     {      //缓存存在且未过期      $flag = true;     }     el     {      $flag = fal;     }   }   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) === fal)   {     //如果需要缓存     $this->debug['cached'] = 'fal';     $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;     }     el     {      include $compilefile;     }     if($this->needcache())     {      $message = ob_get_contents();      file_put_contents($cachefile, $message);     }   }   el   {     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']);   }   el   {     $path = $this->arrayconfig['compiledir'].md5($path).$this->arrayconfig['suffix_cache'];   }   foreach ((array)$path as $v) {     unlink($v);   }  }}

test.php

<?phpinclude '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-&g一年级下册语文教学计划t;show('member');

更多关于php相关内容感兴趣的读者可查看本站专题:《php模板技术总结》、《php基于pdo操作数据库技巧总结》、《php运算与运算符用法总结》、《php网络编程技巧总结》、《php基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家php程序设计有所帮助。

本文发布于:2023-04-07 09:38:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/9ba592b97cf9901c930968736d7d2fcf.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP模版引擎原理、定义与用法实例.doc

本文 PDF 下载地址:PHP模版引擎原理、定义与用法实例.pdf

下一篇:返回列表
标签:模板   缓存   文件   引擎
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图