• PHP模板引擎原理


    开发一个web项目,通常分为两部分,一部分是GUI,即界面、美工,使用HTML,CSS,JS编写,另一部分则是业务逻辑,即程序、功能,使用PHP编写。而模板引擎则是联系这两部分的“桥梁”,可理解成一个PHP类,里面定义了许多方法,实现了将PHP的原始输出加载上界面样式后再输出。

    没用模板之前的编写的代码是这样的:

    <?php
    
    $title = “标题”;
    
    $content = “内容”;
    
    ?>
    
    <html>
    
    <head><title><?php echo $title; ?></title></head>
    
    <body><?php echo $content; ?></body>
    
    </html>
    
    这样的话美工与逻辑没有分离,简单的说就是PHP程序员不仅要写程序还要精通美工,这往往十分困难,因此需要将这两部分工作分开。
    
    在此通过自己创建一个简单的模板引擎为例子,更好的体会模板引擎的原理。
    
    之前说了开发一个web项目分成GUI与业务逻辑两部分,因此我们创建两个文件夹,一个命名为“templates”,里边存放模板,新建一个tpl.html文件,另一个命名为“PHP”,里边存放业务逻辑,新建一个index.php文件。
    

    tpl.html文件代码通常是这样:

    <html>
    
    <head><title><{$title}></title></head>
    
    <body><{ $content;}></body>
    
    </html>
    
    可以看出来,和之前的代码相比,tpl.html中只有html代码,没有php代码,但是增加了新的标签,这类标签是自己定义的,里面的内容只有经过模板引擎编译后才能被识别,编译后的文件存放在“templates_c”文件夹下。这个文件主要是界面设计用的,将大量使用到CSS,JS等技术。
    
    这时候tpl.html和index.php仍旧是分离的,互不干扰,因此需要一个“桥梁”连接,即模板引擎,其实就是一个PHP类,故在此可以创建一个mytpl.class.php的PHP文件。
    
    mytpl.class.php文件通常定义一个类MyTpl,类中需定义一个数组tpl_var[]用于存放tpl.html中自定义内容标签的参数,此外还需定义一些方法,这些方法最主要的目的是将tpl.hml中无法识别的的内容标签转换成PHP语句,然后再写到一个“templates_c”文件夹下的tpl_c.html中,这个过程就是所谓的编译。
    

    通常tpl_c.html文件的代码是这样的:

    <html>
    
    <head><title><?php echo $this->tpl_var[“title”]; ?></head>
    
    <body><?php echo $this->tpl_var[“content”]; ?}></body>
    
    </html>
    
    可以看出上面的代码是可以被识别的,因为自定义的内容标签已经被替换成PHP语句了,但是title和content的值是多少我们还不得而知,这时候之前创建的index.php要上场了.
    

    index.php通常它代码是这样的:

    include  “tpl.class.php文件”;//加载模板引擎
    
    $tpl = new MyTpl();//实例化一个模板类
    
    $title = “标题”;
    
    $content = “内容”;
    
    $tpl->assign(“title”,$title);//调用模板类中的方法,分配变量
    
    $tpl->assign(“content”,$content);
    
    $tpl->display(“tpl.html”);//调用模板类中的方法,用于显示编译后的内容
    
    
    上面的代码只是一些简单的描述代码,其中的变量的值可以是直接定义的也可以是从数据库中获取的,此外该文件还可以编写一些复杂的PHP程序,这也就是之前说的业务逻辑。
    
    这样GUI和业务逻辑的工作就分离了,美工设计人员只需要编写模板文件就可以改变web的界面,而PHP程序员则可以专心编写自己的程序。
    
    公司内部一般都有自己的模板引擎,而通常模板引擎自己写的话完全没有必要,因为市面上已经有一些很成熟的模板引擎了,比如Smarty,我们只需要懂得如何使用它就好了。
    

    作者:萌萌小温柔
    链接:https://www.imooc.com/article/35184
    来源:慕课网

  • 相关阅读:
    layui 标签页切换
    m1配置多个git账户
    sqlserver 获取表和字段的注释方法
    springboot+mybatisPlus 配置多数据源--转载
    nginx 配置静态网页和反向代理
    ORA-01000: maximum open cursors exceeded
    重装系统我们选择FAT还是NTFS?U盘和硬盘格式化两者选谁?
    2、条件表达式
    1、javascript 知识拓展
    1_maven 问题
  • 原文地址:https://www.cnblogs.com/cn-oldboy/p/13784919.html
Copyright © 2020-2023  润新知