代码解释类似smart模版引擎原理

原创
2016-07-29 09:05:00 723浏览

先贴下目录结构:

 ls
compiled/  index.php  source/  ss.class.PHP

compiled 模版编辑后的目录
index.php
source 模版源文件夹
ss.clsss.php 山寨类smarty文件夹
ss.clsss.php
templateDir=$templateDir;
            $this->compileDir=$compileDir;

            if(!empty($leftTag))$this->leftTag=$leftTag;
            if(!empty($rightTag))$this->rightTag=$rightTag;
            if(!empty($templateExtName))$this->templateExtName=$templateExtName;
        }

        // 把用到的变量放入到变量池子中
        public function assign($tag,$var){
            $this->varPool[$tag]=$var;
        }

        // 取出一条变量,用于下面的str_replace正则替换
        public function getVar($tag){
            return $this->varPool[$tag];
        }

        //获取模版源文件
        public function getSourceTemplate($templateName){

            $this->currentTemp=$templateName;

            // 拼接完整文件名
            $sourceFileName=$this->templateDir.$this->currentTemp.$this->templateExtName;
            $this->outputHtml=file_get_contents($sourceFileName);
        }

        // 编译
        public function compileTemplate($templateName=null){

            // 获取当前需要编译的模版
            $templateName=empty($templateName)?$this->currentTemp:$templateName;

            // $pattern='/\{#(\$[a-zA-Z_]\w+)#\}/';// 符合php变量命名

            //preg_quote 可对用户界定的左右定界符中出现. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -进行转义
            $pattern="//m.sbmmt.com/m/".preg_quote($this->leftTag);

            //前后加上空格匹配任意次匹配类似

{# $name #}

$pattern.=' *\$([a-zA-Z_]\w*) *'; $pattern.=preg_quote($this->rightTag)."//m.sbmmt.com/m/"; $this->outputHtml=preg_replace($pattern, 'getVar(\'$1\');?>', $this->outputHtml);// $1写成\\1也可以 // 注意不要用双引号,会解析getvar Template::$getVar报notice错误 $this->outputHtml=preg_replace($pattern, "getVar(\\1);?>", $this->outputHtml); $compileFileName=$this->compileDir.md5($templateName).$this->templateExtName; file_put_contents($compileFileName, $this->outputHtml); } // 输出 public function display($templateName=null){ $templateName=empty($templateName)?$this->currentTemp:$templateName; include($this->compileDir.md5($templateName).$this->templateExtName); } }

简单调用如下:(index.php中内容)

assign('name','iamtb');

    $test->assign('pageTitle','tbtbt');

    $test->getSourceTemplate('index');

    $test->compileTemplate('index');

    $test->display('index');

以上就介绍了代码解释类似smart模版引擎原理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。