`

如何用PHP来编写自己的模板引擎

php 
阅读更多

 

       本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用。

       PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并且减少集成时造成的
额外工作量,模板引擎可以做到对Html页面中的变量、流程逻辑等内容用真实内容进行替换、并有缓存功能,减少每次解析的时间,说白了,模板引擎就是利用字符串替换来将模板用数据转换为真正要展示给用户的内容。
 
1. 原始的编写方法
<?php
        echo “hello world!”;
?>
 内容和页面结合在一起。
 
2. 改进的方法
 
Html:
       
<html>
   <body>
      $var
   </body>
</html>
 
 
PHP:
        
<?php
//读取文件内容
$filecontent;       
$fp=fopen($filename,'r');
$filecontent=fread($fp,filesize($filename));
fclose($fp);
 
//用变量进行替换
$realcontent=str_replace(“$var”,”hello world!”,$filecontent);
 
//显示
echo $realcontent;
?>
 
 
       这样,美工就可以针对html文件进行排版编辑,程序员则可以关注与代码实现。
 
3. 一个简单的模板引擎
    
<?php
//变量前界定符
    var $left_limiter='<?=';
   
    //变量后界定符    
    var $right_limiter='?>';
   
    //存储变量值的数组对象
    var $assign_vars=array();
   
    //遍历深度
    var $searchlevel=2;
    class templater   
    {
        //将变量赋值给模板引擎
        function assign($varnames,$varvalues)
     {
            //get variable name array
            $arrvarname=explode(';',$varnames);
           
            //get variable value array
            if(count($arrvarname)<=1) //can support ";" in value
                   $arrvarvalue=array($varvalues);
            else //can not has ";" in variable name or variable value
                   $arrvarvalue=explode(';',$varvalues);
           
            //add to intenal variable array       
            for($i=0;$i<count($arrvarname);$i++)
            {                         
                   $this->assign_vars[$arrvarname[$i]]=$arrvarvalue[$i];                    
            }
     }
 
     //根据变量名、变量值、模板内容、界定符对内容中的变量用实际值进行替换
     function parsevariable($content,$varname,$varvalue,$left_limiter='',$right_limiter='')
     {
            //get limiter
            if(empty($left_limiter))
                   $left_limiter=$this->left_limiter;
            if(empty($right_limiter))
                   $right_limiter=$this->right_limiter;
                  
            //get variable name
            $varname=$this->wrapreskeyword($varname);                
           
            //parse variable value
            foreach(array(preg_replace("/['\"]/","'",$varname),preg_replace("/['\"]/","\"",$varname)) as $tempvarname)
                 $content=preg_replace("/".$this->wrapreskeyword($left_limiter)."\s*[$]".$tempvarname."\s*".$this->wrapreskeyword($right_limiter)."/i",$varvalue, $content);                                                        
           
            //return result 
            return $content;           
     }
             
              //返回替换后的内容
              function get($templatefile)
       {                  
              global $template,$defaulttemplate;
             
              //define variable     
              $filecontent="";
             
              //get template file content
              if(file_exists($templatefile))   //if not exist,use default template
                     $filecontent=readfilecontent($templatefile);         
              else
                     $filecontent=readfilecontent(str_replace('/'.$template.'/','/'.$defaulttemplate.'/',$templatefile));        
             
              //replace every variable with value
              for($i=0;$i<$this->searchlevel;$i++)
              {
                     foreach ($this->assign_vars as $varname=>$varvalue)             
                     {    
                            //convert variable with value               
                            if(strpos($filecontent,$varname))                             
                                   $filecontent=$this->parsevariable($filecontent,$varname,$varvalue);               
                     }
              }
                    
              //return content
              return $filecontent;
       }
    }
      
//实际的用法
 
       $objtemplate=new templater; //创建模板引擎对象
 
       //变量赋值
       $objtemplate->assign('var',”hello world!”);  
 
       //显示内容
       echo $objtemplate->get("test.html");    
?>
 
 
4. 需要扩展的功能
 
流程逻辑替换
缓存
性能
 
解决以上问题就可以是一个真正的模板引擎,以后的文章中会介绍如何编写一个功能强大的模板引擎!
 
 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    自己作的php模板引擎

    标题中的“自己作的php模板引擎”指的是一个个人开发的PHP模板处理系统,它允许开发者将HTML代码与PHP代码分离,提高代码的可读性和可维护性。在Web开发中,模板引擎通常用于构建动态网页,它使得设计者可以专注于...

    Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。

    Smarty模板引擎是一款专门为PHP开发的模板技术框架,其核心设计理念在于实现前端展示(视图)与后端逻辑(控制...通过理解和掌握Smarty的核心概念和技术,开发者可以更好地利用这一模板引擎来创建高效、整洁的Web应用。

    php自定义模板引擎类.zip

    首先,模板引擎的核心理念在于,它提供了一种方式来编写包含动态内容的HTML或其他类型的视图文件,这些文件通常以特殊的语法标记动态数据。开发者可以使用这个自定义模板引擎类来解析和渲染这些文件,将后端处理的...

    PHP实例开发源码——TMDPHP 国产优秀PHP模板引擎.zip

    PHP模板引擎则是在PHP编程中用于分离业务逻辑与视图展示的一种技术,它允许开发者编写更清晰、更易维护的代码。TMDPHP是一款国产的优秀PHP模板引擎,旨在提供更加便捷和高效的开发体验。 TMDPHP模板引擎的核心特点...

    费尔模板引擎 v2.0.1

    费尔模板引擎是一个基于PHP的高效的PHP模板引擎,主要对于PHP程序的方面快速开发而设计,这意味着PHP代码与HTML是分开的,让程序员有足够的空间发挥编写程序,让网页设计师轻松维护模板代码,而不需要维护PHP与HTML混合...

    高效的PHP模板引擎

    PHPnow是一个基于PHP的高效的PHP模板引擎,主要对于PHP程序的方面快速开发而设计,这意味着PHP代码与HTML是分开的,让程序员有足够的空间发挥编写程序,让网页设计师轻松维护模板代码,而不需要维护PHP与HTML混合的复杂...

    一个最轻量级的PHP模板引擎

    在PHP开发中,模板引擎是一种常见的工具,它用于将业务逻辑和显示逻辑分离,使得开发者可以专注于编写PHP代码处理数据,而设计师则可以专心于HTML布局和样式设计。本项目提供了一个最轻量级的PHP模板引擎,旨在解决...

    Discuz 模板引擎类

    - 模板引擎是一种编程工具,它允许程序员用HTML或类似HTML的标记语言编写界面,然后通过替换特定占位符或标签,将动态数据插入到静态页面中。 2. **Discuz! 模板引擎特点**: - 可扩展性:Discuz! 的模板引擎...

    费尔模板引擎 v2.0.1.zip

    费尔模板引擎是一个基于PHP的高效的PHP模板引擎,主要对于PHP程序的方面快速开发而设计,这意味着PHP代码与HTML是分开的,让程序员有足够的空间发挥编写程序,让网页设计师轻松维护模板代码,而不需要维护PHP与HTML混合...

    xingtemplate php模板引擎

    XingTemplate的设计理念在于简洁和高效,它允许开发者用一种接近HTML的语法来编写模板,然后通过PHP解析并生成最终的动态网页。这种方式使得开发者可以快速地创建和修改页面结构,同时保持代码的清晰性。 在提供的...

    自己写的模板引擎(仿照smarty)

    适合php程序员进阶的开发技能,通过编写个性化 的模板引擎,能够梳理自己的技能,了解页面静态化,smarty的工作原因以及对面向对象的能力逐步加深。希望大家喜欢。另外,介绍一本书 php核心技术与最佳实践。php进阶...

    php 模板引擎原理 简单模板引擎实例

    该模板引擎案例,是本人自己经过学习;理解后写的一个简单案例,主要是根据其原理步骤进行编写;有说明文档!把原理流程搞明白了那么进行项目开发;难易程序也只是对代码的美化和包装!!php模板引擎原理|简单模板引擎...

    php模板引擎设计原理

    如果想动手实践,可以从《自己写的php模板引擎.txt》开始,根据已有的模板引擎源码,尝试编写和优化自己的模板引擎。 总的来说,PHP模板引擎是提高Web开发效率的有效工具,通过理解和掌握其设计原理,我们可以更好...

    PHP实例开发源码-PHPnew 模板引擎.zip

    首先,模板引擎的基本概念是,它允许开发者使用一种特定的模板语言来编写视图层的代码,这种语言通常简化了HTML的编写,同时引入了变量和控制结构。在PHPnew 模板引擎中,开发者可以使用PHP语法或特定的模板标记来...

    基于PHP的NewsTeng php模板引擎.zip

    1. **简洁的语法**:NewsTeng模板引擎通常使用类似于`{$var}`这样的语法来插入变量,`{foreach}`、`{if}`等结构进行循环和条件判断,使得模板文件更接近自然语言,易于理解和编写。 2. **高效的执行**:NewsTeng在...

    基于PHP的new 模板引擎 v7.3.1.zip

    3. **编写模板**:使用模板引擎的语法编写HTML文件,插入PHP变量和逻辑。 4. **渲染**:在PHP代码中调用模板引擎的渲染方法,传入数据并生成HTML输出。 5. **部署与维护**:部署到服务器,并根据需要更新或优化模板...

    模板引擎(标签解析)示例源码

    开发者会在这类页面中使用模板引擎的语法来定义动态内容区域。 2. **web.config**:这是ASP.NET应用程序的配置文件,包含关于应用程序设置、数据库连接字符串、安全策略等信息。在模板引擎的上下文中,它可能包含...

    PHP模板引擎介绍.pdf

    PHP模板引擎可以使开发者专注于代码编写,而设计人员可以专注于界面设计和美化等操作。 PHP模板引擎的优点: * 使得数据处理和数据显示互不影响 * 程序员可以专注于代码编写,设计人员可以专注于界面设计和美化 *...

    smarty模板引擎教程

    Smarty是一种服务器端的模板引擎,它允许开发者使用简单的HTML模板语言来编写界面,然后通过Smarty编译成PHP代码执行。这种分离使得程序员可以轻易地修改或重用代码,同时设计师也可以自由调整页面样式,无需了解...

Global site tag (gtag.js) - Google Analytics