加入收藏 | 设为首页 | 会员中心 | 我要投稿 均轻资讯网_我爱站长网 (https://www.52junqing.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP使用模板的简单例子

发布时间:2022-10-13 12:35:29 所属栏目:PHP教程 来源:
导读:  这里包含3个文件:test.php执行文件、parser.php编译类、temp.tpl模板

  test.php

  $user = 'ZhangRongQuan';

  $method = 'What are you doing?';

  //导入类文件
  这里包含3个文件:test.php执行文件、parser.php编译类、temp.tpl模板
 
  test.php
 
  $user = 'ZhangRongQuan';
 
  $method = 'What are you doing?';
 
  //导入类文件
 
  require_once './parser.php';
 
  //创建对象
 
  $cms = parser::inc();
 
  //往数组添加元素
 
  $cms->assign('user', $user);
 
  //往数组添加元素
 
  $cms->assign('method', $method);
 
  //编译模板文件并载入php或者缓存文件
 
  $cms->display('./temp.tpl');
 
  parser.php
 
  class parser{
 
  private
 
  //用数组来存放模板变量的内容,键值就是变量名
 
  $arr = array(),
 
  //静态的缓存文件
 
  $fn,
 
  //编译文件
 
  $pn;
 
  private
 
  static $int;//用于单例
 
  //初始化传入的参数是模板文件
 
  protected function __construct(){
 
  $fname = 'c_' . md5('parser');
 
  //静态的缓存文件
 
  $this->fn = './' . $fname . '.htm';
 
  //编译文件
 
  $this->pn = './' . $fname . '.php';
 
  }
 
  //单例
 
  public static function inc(){
 
  if(!self::$int instanceof self)
 
  self::$int = new self();
 
  return self::$int;
 
  }
 
  //给数组赋值,键值就是变量名
 
  public function assign($key, $val){
 
  if(!!$key)
 
  //给模板变量赋值,key是变量名
 
  $this->arr[$key] = $val;
 
  //****************************************
 
  //用数组来接收变量值,可以在后面的编译替换时,
 
  //让模板的变量与值相对应,如果直接使用变量
 
  //来接收,会造成模板里所有的变量的值都一样
 
  //*****************************************
 
  }
 
  //加载文件,并根据条件创建缓存文件
 
  public function display($cname){
 
  //获取当前调用本类的文件的文件名
 
  $currentFile = './' . basename($_SERVER['PHP_SELF']);
 
  //***********************************************
 
  //如果存在缓存文件,并且缓存文件修改的时间比编译
 
  //文件晚,并且编译文件修改的时间比当前文件晚,则
 
  //直接载入缓存文件
 
  //***********************************************
 
  $fn = $this->fn;
 
  $pn = $this->pn;
 
  if(file_exists($fn) && $this->copTime($fn, $pn) && $this->copTime($pn, $currentFile)){
 
  //测试用,看条件是否成立,条件成立即相关内容没有发生变化
 
  echo rand();
 
  //内容不变时直接载入缓存文件,无需重写缓存文件
 
  include_once $fn;
 
  }else{
 
  echo '
 
  我进行了编译
 
  ';
 
  //编译PHP文件
 
  $this->par($cname);
 
  //载入编译文件
 
  include_once $pn;
 
  //内容发生了变化,要重写缓存文件
 
  file_put_contents($this->fn, ob_get_contents());
 
  }
 
  }
 
  //判断文件的修改时间
 
  private function copTime($an, $dn){
 
  return filemtime($an) >= filemtime($dn);
 
  }
 
  //编译PHP文件
 
  private function par($cname){
 
  //导入模板文件,获取文件的内容
 
  $conts = file_get_contents($cname);
 
  //正则表达式
 
  $reg = '/\{\$([\w]+)\}/';
 
  //替换
 
  if(preg_match($reg, $conts)){
 
  $conts = preg_replace($reg, "", $conts);
 
  //********************************************************
 
  // \$this->arr['$1']里的['$1']可以写成['\\1']表示正则里的第一个分组,
 
  // 就是正则的()里的内容(这是正则的知识),前面使用数组在这
 
  //里就可以保证变量值是对应我们所要的,比如,模板里的变量是
 
  //{$user}php实例教程,那这所替代的是$this->arr['user'],而数组arr的user元素恰
 
  //好对应的值是$user,这个在assign方法里已经赋值过了
 
  //********************************************************
 
  }
 
  //创建PHP编译文件
 
  file_put_contents($this->pn, $conts);
 
  }
 
  }
 
  temp.tpl
 
  {$user}
 
  {$method}
 

(编辑:均轻资讯网_我爱站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!