Rumah > pembangunan bahagian belakang > tutorial php > 一个简单的模板类--编译型的(simplet类增强后)

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-05-19 15:12:13
asal
951 orang telah melayarinya

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



下面是包含文件()

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan