◇如何在类的内部使用外部声明的变量:
◇可以把模板引擎内部使用的变量信息,都声明为该模板类的属性信息,这样在累的内部可以正常使用本身的属性信息。
◇改进后的MiniSmarty.class.php的代码如下:
1 <?php 2 class MiniSmarty 3 { 4 5 public $tpl_var = array(); 6 function assign($key,$content){ 7 $this -> tpl_var[$key] = $content; 8 9 } 10 11 12 function compile($tpl){//花括号标记替换为PHP标记 13 $cont = file_get_contents($tpl); 14 //echo $cont; 15 16 //替换 "{" ----> "<?php echo" 17 $cont = str_replace("{$","<?php echo $this->tpl_var['",$cont); 18 $cont = str_replace("}","']; ?>",$cont); 19 20 //把生成好的编译内容(php+html混编内容)放入一个文件内 21 file_put_contents('./tpl.html.php',$cont); 22 require_once "tpl.html.php"; 23 } 24 25 } 26 ?>
◇而001.php的代码也需要做出改变,代码如下:
<?php $name = "xixii" ; $age = 19 ; $height = 180 ; require "MiniSmarty.class.php"; $smarty = new MiniSmarty(); //做出改变的代码在这里 $smarty -> assign('name','xixi'); $smarty -> assign('age','19'); $smarty -> assign('height','180'); //做出改变的代码在这里 $smarty -> compile('001.html'); ?>
◇上面的模板引擎已经可以使用了,但是我们还是可以进行缓存优化,减少服务器压力
◇混编文件已经存在,就不需要再反复生成,可以直接使用,可以利用一个判断来实现,其中判断条件有两个,需要注意。
1 <?php 2 class MiniSmarty 3 { 4 5 public $tpl_var = array(); 6 public $template_dir = "./view/"; 7 public $template_c_dir = "./view_c/"; 8 function assign($key,$content){ 9 $this -> tpl_var[$key] = $content; 10 11 } 12 13 function display($tpl){ 14 $n = $this -> compile($tpl); 15 require_once $n; 16 } 17 18 function compile($tpl){//花括号标记替换为PHP标记 19 $com_file = $this -> template_c_dir . $tpl.".php"; 20 $tpl_file = $this -> template_dir . $tpl; 21 //走'已经生成'的混编文件需要满足下面两个条件 22 //①来判断混编文件是否存在, 23 //②还需要通过混编文件的时间,要大于模板文件的修改时间 24 if(file_exists($com_file) && filemtime($com_file) > filemtime($tpl)) 25 { 26 return $com_file; 27 } 28 else 29 { 30 echo "new file"; 31 $cont = file_get_contents($tpl); 32 //echo $cont; 33 34 //替换 "{" ----> "<?php echo" 35 $cont = str_replace("{$","<?php echo $this->tpl_var['",$cont); 36 $cont = str_replace("}","']; ?>",$cont); 37 38 //把生成好的编译内容(php+html混编内容)放入一个文件内 39 file_put_contents($com_file,$cont); 40 return $com_file; 41 } 42 } 43 44 } 45 ?>