PHP实现简易的模板引擎

PHP实现简易的模板引擎

1.MVC简介

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度):

1. Model(模型)表示应用程序核心(比如数据库记录列表)。
2. View(视图)显示数据(数据库记录)
3. Controller(控制器)处理输入(写入数据库记录)。

[百度百科]

MVC的流程图如下(来源百度百科):

2.本文重点:模板引擎

在视图层,PHP可以采用两种方式编写:

  1. PHP代码和HTML代码混写,甚至JavaScript等
  2. 采用模板引擎使得数据和显示分离,这种方式更易于维护。

    首先让我们来看一下混写代码:

    <!DOCTYPE html>
    <html>
    <head>
    <title>混写代码</title>
    </head>
    <body>
        商品信息:
        <?php
        mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
        mysql_select_db("shop");
        $result = mysql_query("select * from sh_goods");
    ?>
        <ul>
            <?php while (mysql_fetch_array($result)) {?>
                <li><?php echo $result[‘good_name‘]; ?></li>
            <?php } ?>
        </ul>
        <?php
            mysql_free_result($result);
            mysql_close();
        ?>
    </body>
    </html>

这种方式往往随着前端逻辑的复杂度变得越来越大,代码的可读性也会变得很差,代码的可重用性也不好。(比如我们需要重复的编写从数据库中获取数据的代码)

模板引擎有两种机制

接下来,我们用原生态模板机制来实现

1.原生态机制

该机制主要是执行数据库操作的代码get_data.php单独放到一个文件中,显示的hmtl代码show_page.php放到另一个文件中,然后在html代码show_page.php中包含执行数据库操作的代码get_data.php.代码如下:

get_data.php
    <?php
        mysql_connect("localhost","root","") or die("conect failed:".mysql_error());
        mysql_select_db("shop");
        $result = mysql_query("select * from sh_goods");
        $data = array();
        while (mysql_fetch_array($result)) {
            $data[] = $result[‘good_name‘];
        }
        mysql_free_result($result);
        mysql_close();
    ?>
show_page.php
    <!DOCTYPE html>
    <html>
    <head>
        <title>分离代码</title>
    </head>
    <body>
        商品信息:
        <ul>
            <?php
                include ‘get_data.php‘;
                foreach ($data as $key => $value) {
            ?>
            <li><?php echo $value[‘good_name‘]; ?></li>
            <?php } ?>
        </ul>
    </body>
    </html>

该机制比较简单,符合PHP的语法和使用的习惯,显然比混写代码更容易维护。但是,有时考虑到网站的性能,我们想要缓存代码的时候,这种方法就不能提供支持了。类似的,错误处理,可配置化,脱离php语法等高级功能也不容易实现。

2.更强大的模板机制

该机制与上一个机制刚好相反,在负责数据操作的文件中包含模板,模板只负责显示即可,不用考虑php操作。
本引擎的执行流程如下:

该模板引擎有以下几部分组成

  1. Cache文件夹: 该文件夹存放编译完成后的文件
  2. Template文件夹: 该文件夹存放模板文件
  3. Template.class.php Template类提供了读取和设置配置的方法,注入变量方法,展示模板的方法。
  4. Compile.class.php Compile类提供了模板解析方法,模板解析方法是通过预先定义好的正则表达式匹配,并替换成相应的PHP代码,同时也添加了PHP原生代码的支持。我们也可以简单地通过添加正则表达式,来扩充变量标签。

由于代码有点长,所以放在github上,O(∩_∩)O~,代码比较简单,可以加深我们对模板引擎的理解,smarty等更复杂,但基本原理差不多就是这样。
具体代码链接如下:https://www.github.com/fengyuhetao/Code.git,该目录Template Engine中就是简易的模板引擎代码。

说明:该源代码是基于《PHP核心技术与最佳实践》一书中的案例,本人只是稍作修改,非原创。文章为原创。
时间: 2024-10-11 10:31:00

PHP实现简易的模板引擎的相关文章

简易前端模板引擎

模板解析 解决的问题: 将data和js+html片段解析成html片段,完成赋值和js逻辑,如下所示: 输入: var data = {    name: 'hwm',    articles: [{ title: 'the first one' }, { title: 'the last one' }]};tpl = '<p>Hi my name is <%this.name%>.</p><p>My articles are listed as foll

JS模板引擎 :ArtTemplate (2)

上一篇初略的介绍了一下javascript中的模板引擎,有兴趣的可以戳 这里 . 这一篇将带着大家一起做一个简易的模板引擎, 上一篇介绍到:模板引擎其实做的就是两件事. 根据一定的规则,解析我们所定义的模板 根据数据以及模板生成html(其实背后也是用的字符串拼接) 那么,首先,我们要有一个模板,一份数据,以及想生成的结果. 例如:模板: 1 <script id="test" type="text/html"> 2 <p><%=tit

一个简单的PHP模板引擎

PHP早期开发中通常是PHP代码和HTML代码混写,这也使代码中充斥着数据库操作,逻辑处理等.当项目不大时,这样的代码还可以接受,但是随着项目不断扩大,我们就会发现同一个文件中同时存在前端逻辑和后端处理,当逻辑越来越复杂时,代码的可读性和可维护性都会变得非常差,以至于后来不得不进行大规模的代码重构.所以后来就出现了代码分层的思想,尽量拆分开前端代码和后端代码. PHP模板引擎能解决这种混乱吗?当然可以.但是呢,即使你不用专门的模板引擎也可以写出逻辑清晰的代码,重点是要有分层的思想,有专门的脚本去

php 实现简易模板引擎

1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Model(模型)表示应用程序核心(比如数据库记录列表). 2. View(视图)显示数据(数据库记录) 3. Controller(控制器)处理输入(写入数据库记录). [百度百科] MVC的流程图如下(来源百度百科): 2.本文重点:模板引擎 在视图层,PHP可以采用两种方式编写: PHP代码和HTML代码混写,甚至JavaSc

js 如何实现模板引擎

这是2013年的某个项目, 开发自己的编辑器,  当中需要用到模板引擎, 后自己简单琢磨了下,  实现了个简易版的.   实现模板解析最大的难题就是 变量解析 , 和如何有效的拼接可执行的字符串. 例:  hello world  {$title} 好 {$content}  {for(var i in data)}  你好  {/for} ,里面有 title,cotnent,data,及for循环,  "{$ }" 代表变量, "{for}"代表循环,{/for

JavaScript Template JST模板引擎----Trimpath [转]

官方网址:http://trimpath.com/project/wiki/JavaScriptTemplates Trimpath JavaScript 是个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎. 它有如下的特点:1.采用标准的JavaScript编写,支持跨浏览器 2.模板语法类似于:FreeMarker,Velocity,Smarty3.采用简易的语言来描述大段的字串以及Dom/DHTML操作 4.

Trimpath Template 及JS模板引擎原理

这个是一个很老的JS模板引擎.看了下源码,理解下模拟条件语句的替换原则.感觉有点复杂~ 简记之. 如果不涉及条件语句,可以直接在代码里构建模板,ajax请求回来的数据套用即可.最原始方式. Trimpath JavaScript 是个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎. 它有如下的特点: 1.采用标准的JavaScript编写,支持跨浏览器 2.模板语法类似于:FreeMarker,Velocity,S

pug模板引擎(原jade)

前面的话 为什么要引入pug,pug有什么特别之处呢?有一些嵌套层次较深的页面,可能会出现巢状嵌套,如下图所示 在后期维护和修改时,一不小心少了一个尖括号,或者某个标签的开始和闭合没有对应上,就会导致DOM结构的混乱甚至是错误.所以,有人发明了HAML,它最大的特色就是使用缩进排列来代替成对标签.受HAML的启发,pug进行了javascript的实现. Pug原名不叫Pug,是大名鼎鼎的jade,后来由于商标的原因,改为Pug,哈巴狗.其实只是换个名字,语法都与jade一样.丑话说在前面,Pu

php模板原理PHP模板引擎smarty模板原理浅谈

mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有php代码来操作数据库之类的来获取数据的,我们一般都会在控制器层controller,就已经把视图层要展示的数据准备好,方便视图层直接用来展示. smarty模板技术,可以让数据和视图进行分离,让视图中不能直接出现php代码.这样的话,让前段页面的开发和后台数据的开发,可以双管齐下,同时进行了. sma