欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个简单的模板类--编译型的(simplet类增强后)

程序员文章站 2022-06-15 16:26:50
...

在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能都加进去了!!!
大家有兴趣的话,我下次出个教程,来谈谈我写这个类的一些思想和方法!!!支持的话可以跟贴支持我!
PHP代码:
simplet.class.php
class SimpleT {
  PRivate $t_vars;
  private $templates_dir;
  private $templates_c_dir;
  private $cache;
  private $cache_dir;
 
  public function __construct() {
    $this->templates_dir = './templates/';
    $this->templates_c_dir = './templates_c/';
    $this->cache = 0;
    $this->cache_dir = './cache/';
  }
  public function setDir($dir, $type = 'template') {
    if(is_dir($dir)) {
      if($type == 'template')
        $this->templates_dir = rtrim($dir, '/').'/';
      elseif($type == 'template_c')
        $this->templates_c_dir = rtrim($dir, '/').'/';
      elseif($type == 'cache')
        $this->cache_dir = rtrim($dir, '/').'/';
      else
        return false;
      return true;
    } else {
      return false;
    }
  }
 
  public function cache($time) {
    if(is_numeric($time)) {
      $this->cache = $time;
      return true;
    } else {
      return false;
    }
  }
 
  public function assign($var, $value = NULL) {
    if (is_array($var)) {
      foreach ($var as $key => $val) {
        $this->t_vars[$key] = $val;
      }
    } else {
      $this->t_vars[$var] = $value;
    }
  }
  private function comp($filename) {
    try {
      if(!$fp = fopen($filename, 'r')) {
        throw new Exception('Can not open ' . $filename);
      }
      $filesize = filesize($filename);
      if($filesize         throw new Exception('The file size must > 0 ' );
      }
      $content = fread($fp, $filesize);
      fclose($fp);
      unset($fp);
     
      $content = preg_replace("//","", $content);
      $content = preg_replace("//", " \\$$1_val) { ?>",$content);
      $content = preg_replace("//", "", $content);
      $content = preg_replace("//", " \\$$3) { ?>", $content);
      $content = preg_replace("//", "", $content);
      $content = preg_replace("//", "", $content);
      $content = preg_replace("//", "", $content);
      $content = preg_replace("//","", $content);
      $content = preg_replace("/([^]{0,})/", "", $content);
      if (preg_match_all("/)]{1,})}%>/", $content, $files)) {
        $this->comp($this->templates_dir . $files[1][0]);
      }
      $content = preg_replace("/)]{1,})}%>/", "templates_c_dir}simplet_comp_$1.php'; ?>", $content);
      echo $content;
      $fp = fopen($this->templates_c_dir . 'simplet_comp_' . basename($filename) . '.php', 'w');
      if(!fwrite($fp, $content)) {
        throw new Exception('Can not write content in the ' . $filename);
      }
      fclose($fp);
    } catch (Exception $e) {
      echo $e->getMessage();
    }
    return true;
  }
  public function display($filename) {
    $filename = $this->templates_dir . $filename;
    if(!file_exists($filename)) {
      return false;
    }
    $t_filename_c = $this->templates_c_dir . 'simplet_comp_' . basename($filename) .'.php';
    if(!file_exists($t_filename_c) || filemtime($t_filename_c)       $this->comp($filename);
    }
    if($this->cache > 0) {
      $cache_file = $this->cache_dir . basename($filename);
      if(!file_exists($cache_file) || (time() - filemtime($cache_file)) > $this->cache) {
        ob_start();
        foreach ($this->t_vars as $key => $val) {
          $$key = $val;
        }
        include($t_filename_c);
        $content = ob_get_contents();
        ob_end_clean();
        $fp = fopen($cache_file, 'w');
        fwrite($fp, $content);
        fclose($fp);
        echo $content;
        unset($content);
      } else {
        include($cache_file);
      }
    } else {
      foreach ($this->t_vars as $key => $val) {
        $$key = $val;
      }
      include($t_filename_c);
    }
   
  }
}
?>

PHP代码:
test.php

require_once('simplet.class.php');

$t = new SimpleT();
$t->cache(10);//开启cache功能,并且设置为过期时间为10秒
$t->assign('arrays', array(array('hello','world')));
$t->assign('condition',false);
$t->display('index.php');
?>

PHP代码:
index.php(模板文件,放在templates/文件夹里)


这里是注释
下面是多维数组循环


 
   
 


下面是条件判断


 

Condition is true



下面是包含文件()