时间:2021-07-01 10:21:17 帮助过:5人阅读
 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="/".preg_quote($this->leftTag);
            //前后加上空格匹配任意次匹配类似{# $name  #}
            $pattern.=' *\$([a-zA-Z_]\w*) *';
            $pattern.=preg_quote($this->rightTag)."/";
            $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教程有兴趣的朋友有所帮助。