Home  >  Article  >  Backend Development  >  以小弟我之代码示例驳斥此等评语,看看什么叫模板引擎。

以小弟我之代码示例驳斥此等评语,看看什么叫模板引擎。

WBOY
WBOYOriginal
2016-06-13 13:29:17731browse

以我之代码示例驳斥此等评语,看看什么叫模板引擎。。
【既然知道评价中肯,就应该明白差距在哪里了吧,每次运行都进行替换,相当程度上降低了系统性能,这样的模板引擎还有什么优势??】
【的确是有差距的,我看了一下,按照你说的一年多了,你已经累计有5次下载,和1毛钱的运营盈利。跟他这个只是会发个帖子,贴些代码,又没人下载,又没盈利的情况,差距实在太大了。】


PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php class IndexAction extends YouYaX
{
        public function index()
        {
            header("Content-type: text/html; charset=utf-8");
            $this->assign("csdn","csdner,大家中午好")
                     ->assign("head",array("来自","xxx"))
                 ->assign("greet",array("<h2>PHP技术</h2>","基础编程","开放资源","framework"))
                 ->assign("foot",array(
                                                                 array("id"=>'1',"foot"=>"这是底部测试1"),
                                                                 array("id"=>'2',"foot"=>"这是底部测试2"),
                                                                 array("id"=>'3',"foot"=>"这是底部测试3")
                                                             ))
                 ->assign("bye","88,good bye");
            $this->display("index.html");
         }
}
?>



HTML code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    
        <title>welcome YouYaX</title>
    
    
    <center>
    
        <table width="400">
        <!--  普通替换 -->
        <tr>
            <td>{csdn}</td>
        </tr>
        <!--  一维数组替换 -->
        <tr>
            <td>
<loop> {head} ―――― </loop> 发表在【{greet->1}】</td>
        </tr>
        
        <!--  一维数组替换 -->
         <loop>
             <tr><td>{greet}</td></tr>
         </loop>
        </table>
        <hr>
        <!--  二维数组替换 -->
        <list>
            <h3>
                {foot.foot}
            </h3>
        </list>
        <!--  普通替换 -->
        {bye}
        <hr>
        比较测试 , 让我们在html中使用PHP吧 , 模板变量上要写上双引号 <br>
        <?php if( "{bye}"=="88,good bye" ){
                 echo "<font color=red>看吧 , 果然正确吧, 测试结束,测试者:{head->1}";
         }else{
                 echo "错了";
            }
        ?>
    </center>
    







------解决方案--------------------
你晒的不是模板引擎啊
------解决方案--------------------
那么你的模板引擎做了什么呢
PHP code
            //――普通替换
            //单个输出数组值
        //    var_dump($this->array_array);exit;
            $return=preg_match_all('/\{[^{]*->[^{}]*}/',$txt,$single);
            if($return){
            foreach($single[0] as $v){
                $x=strlen($v);
                $y=$x-2;
                $z=substr($v,1,$y);  //title->0
                $z1 = preg_split('/->/', $z, -1, PREG_SPLIT_NO_EMPTY);
                $txt=str_replace($v,$this->array_array[$z1[0]][$z1[1]],$txt);
            }
        }
            //数组替换
            $return=preg_match_all("/\s*(.+?)\s*/s",$txt,$match);
            if($return){
            try{
                foreach($match[1] as $lv){
                    if(eregi("",$lv)){
                         throw new Exception(htmlspecialchars("<loop>标签不能嵌套<loop>!"),"304");
                         break;
                    }
                }
            }catch(Exception $e){
                $this->exception($e);
            }
            $result0=$match[0];   //<loop><tr><td>{array}</td></tr></loop> 系列数组    <loop>{array2}</loop>    
            $result1=$match[1];   //<tr><td>{array}</td></tr>    系列数组{array2}
            //var_dump($result1);exit;
            foreach($result1 as $r1){
            preg_match_all("/\{(.*)\}/",$r1,$match2);
            $result2=$match2[0][0];//{array}
            $result3=$match2[1][0];//array
            $result4=$this->array_array[$result3];//得到的数组
            try{
                if(!is_array($result4))
                     throw new Exception(htmlspecialchars("<loop>标签解析出错,仅支持一维数组!"),"306");        
                /*
                if(empty($result4))
                     throw new Exception(htmlspecialchars("<loop>解析一维数组值为空!"),"308");    
                */                    
            }catch(Exception $e){
                $this->exception($e);
            }
            $result5='';
        //    unset($result5);   //result5 清零
            foreach($result4 as $v){
                $result5.=str_replace("{".$result3."}",$v,$r1);                
            }
            foreach($result0 as $r0){
                if(ereg($result2,$r0))
                    $txt=str_replace($r0,$result5,$txt);
            }
        }
    }
            //--数组替换
            //include替换
            $return=preg_match_all("//",$txt,$inc);
            if($return){
            $inc1=$inc[0];//<include file="top.html">系列数组
            $inc2=$inc[1];//top.html 系列数组
            foreach($inc2 as $v){
                if(file_exists($v)){
                    $sub=file_get_contents($v);
                    foreach($inc1 as $v1){
                        //区分大小写匹配
                        if(ereg($v,$v1)){
                            $txt=str_replace($v1,$sub,$txt);
                        }
                    }
                }else{
                    exit("include标签解析出错!");
                }
            }
        }
 <div class="clear">
                 
              
              
        
            </div></include></loop></loop></loop></loop>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article: 求教,该怎么处理 Next article: 关于js验证