从此不求人:自主研发一套PHP前端开发框架(24)

18 篇文章 0 订阅
15 篇文章 0 订阅

正则表达式登场

preg_match_all(‘正则’,’字符串’,匹配结果集)
该函数本身返回boolean,表示匹配成功。
该函数基本用法:
$pattern=’/\w{1,20}/is’;
\w匹配字母、下划线、数字
{1,20} 表示\w的范围在1-20个字符
i是修饰符代表忽略大小写。s修饰符主要针对于.使之包含换行符

解析思路

1.利用正则把{XXX}都取出来
2.把里面的值和$this->_vars 的key进行对比,如存在则替换,否则不予理会
这里有几个正则需要学习
1.代表0个或多个,+代表1个或多个,?代表0个或一个
2.\s代表空格
3.小括号代表分组

_Master.inc

<?php 
  //所有controller的父类 抽象类 
  abstract class _Master{
     var $_view='index';//模板名称
     var $_vars = array();
     var $_cachetime=0;//缓存时间
     function setView($viewName){
         $this->_view = $viewName;
     }
     function getView(){
        return LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.$this->_view.'.'.LKPHP_EXTENSION;
     }
     function setVar($varName,$varValue){
         //设置变量
        $this->_vars[$varName] = $varValue;
     }
     function hasVarCache(){
        if(the_cache($this->_view)){
            return true;
        }
        return false;
     }
     function run(){

        //解包变量
        if($this->_cachetime > 0){
            $getVars_cache = the_cache($this->_view);
            if($getVars_cache){
                echo '<b>这是从memcache中获取的数据</b><br/>';
                extract($getVars_cache);
            }else{
                //同时要设置缓存
                set_cache($this->_view,$this->_vars,0,$this->_cachetime);
                extract($this->_vars);
            }
        }else{
            extract($this->_vars);
        }
        extract($this->_vars);
        if(LKPHP_IS_OPEN_FILE_CACHE){
            //这里我们要讲写入缓冲区
            $tpl='';
            ob_start();
            //加载头部模板
            include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWHEADER.'.'.LKPHP_EXTENSION);
            include($this->getView());//加载模板body
            include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWFOOTER.'.'.LKPHP_EXTENSION);//尾部
            $tpl = ob_get_contents();

            ob_clean();
            $file_name = md5($_SERVER['REQUEST_URI']);
            $cache_file='Cache/'.$file_name;
            if(file_exists($cache_file)){
                echo  file_get_contents($cache_file);
            }else{
                file_put_contents($cache_file,$tpl);
                echo $tpl;
            }
        }else{
            $tpl='';
            ob_start();
            //加载头部模板
            include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWHEADER.'.'.LKPHP_EXTENSION);
            include($this->getView());//加载模板body
            include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWFOOTER.'.'.LKPHP_EXTENSION);//尾部
            $tpl = ob_get_contents();
            ob_clean();
            $tpl=$this->genSimpleVars($tpl);
            echo $tpl;
        }

     }
     //魔术方法
    function __get($p){
        $c=load_class($p);
        return $c;
    }
    //解析简单变量
    function genSimpleVars($getTpl){
        $pattern = "/\{\s*(\w{1,20})\s*\}/is";

        if(preg_match_all($pattern,$getTpl,$result)){
            $result = $result[1];
            foreach ($result as $r) {
                if(array_key_exists($r, $this->_vars)){
                   $replace_pattern = "/\{\s*".$r."\s*\}/is";
                   $getTpl = preg_replace($replace_pattern,$this->_vars[$r],$getTpl);
                }
            }
        }
        return $getTpl;
    }

  }
 ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值