Home >Backend Development >PHP Tutorial >一个简单的模板类--编译型的(simplet类增强后)

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

WBOY
WBOYOriginal
2016-05-19 15:12:13915browse

在上次发布的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



下面是包含文件()

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn