模板引擎

 模板引擎,为了使用户界面与业务数据内容分离而产生的。web网站中,例如Smarty的模板引擎就是将html模板编译成php脚本,其主要功能就是将php和html分离。

     传统的代码场景,php连接数据库取出数据,处理数据后,php代码与html代码混合输出,这种方式,如果后期修改代码的时候需要php程序员既要精通前端代码也要会熟练后台代码,不太方便。

     希望将php与html代码分离开来,后台程序员专门做业务数据处理,前端人员精于html用户界面体验,所以模板引擎应运而生。将原本的<?php echo ?>替换为{}等特定的标签。实现界面与数据的分离,大大提升了开发效率,而且我们还可以实现数据分离(动态数据与静态数据),或者静态页面缓存等。

自己动手写一个简单的模板类 

  先说一下简单的模板引擎流程。

模板引擎基本流程

 

[1]把需要显示在页面的变量等赋值传到对象的属性中。

利用assign($array)方法 将数据传到模板类的$_data属性里面

[2]编译html模板 ,解析成响应php echo的代码

利用compile($template)方法替换模板内容,将{$data} 替换成<?php echo $this->_data; ?>,最后将编译过的内容生成php脚本文件。

同时在进行编译的时候要先判断是否已经存在编译后的文件,或者是修改模板后是否需要重新编译(判断文件时间先后)

[3]引入编译后的php文件

包含编译后的文件

 

//写一个简单的模板编译类
class Mini{
        public $dir_template = '';//原 模板文件所在的文件夹
        public $dir_compile  = '';//后 模板编译后存放的位置
        public $_data = array();//定义一个数组用来接收外部变量
/**
 * 赋值给模板文件变量
 */
        public function assign($key,$value){
            $this->_data[$key] = $value;
        }
/**
 * 把指定的模板内容读取过来,然后编译成对应的php文件
 *
 */
        public function compile($template){
            //读取模板内容
            $source = file_get_contents($this->dir_template.'/' . $template);
            //编译保存的文件
            $outfile  = $this->dir_compile . '/' . $template . '.php';
//判断是否已经有模板编译后的文件
            if(file_exists($outfile) && (fileatime($this->dir_template.'/' .$template) > fileatime($outfile)) ){
                return $outfile;
            }
            //替换模板里面的{$}  改成<?php echo ;
            $source   = str_replace('{$','<?php  echo $this->_data[\'',$source);
            $source   = str_replace('}','\'];?>',$source);
            //把编译后的文件保存  .php文件
            file_put_contents($outfile,$source);
            return $outfile; 
        }

/**
 * 调用compile来编译模板并引用
 */
        public function display($template){
            $compile = $this->compile($template);
            include($compile);//自动引入
        }
}
file_get_contents($file)  把文件读入一个字符串
file_put_contents($file,$str)将一个字符串写入文件

file_exists($file)

检查文件或目录是否存在
fileatime($file)取得文件的上次访问时间

 

 

 

 

 

缺点 

 【1】编译模板需要花费时间 一般类似preg_match或者preg_replace正则函数匹配或者函数的标签截断匹配类似方法

【2】程序和模板分离后,需要把变量赋值到对象的属性上,增大开销。

优点

【1】模板的缓存技术,很棒,将原本的每次都需要走php脚本文件读取数据库,如果生成缓存,则仅需读取html

【2】业务与界面的分离看起来,代码逻辑更加清晰,等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值