PHP模板引擎原理

操作方法

  • 01

    1.模板引擎的由来 模板引擎思想来自于经典的MVC模型,即模型层 - 视图层 - 控制器模型。MVC本来存在于桌面程序中,M指数据模型,V指用户界面,C指控制器。使用MVC的目的是将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。 随着Web的流行,这一模型被引入Web开发中。此时,V(视图层),也就是通常所说的模板,实现了数据生成和数据展示的分离。早期的视图通常是由html元素控制界面,随着互联网的发展,一些新的表现出技术(例如Flex等)流行起来,MVC使得数据和表现得到分离,一套数据可以用于多种表现层而无需修改逻辑层的代码。例如,可以在M层(模型层)生成博客文章列表的数据,然后可以在传统的Web页面、RIA应用、手机应用中使用不同的表现层技术来展示数据,而不用修改逻辑层的代码,实现前端和后端的分离。 此外,AJAX技术的流行、Jquery库的普遍应用,使早期html、Javascript、PHP代码混写的情况得到改观。AJAX技术的应用使数据的请求和生成、展示实现了分离,促进了表现层(V)和代码层的分离。 模板引擎作为视图层和模型层分离的一种有效解决方案,让前后端更好的分工协作。PHP开发经历了前后端混编,到极力推崇模板引擎(以Smarty为代表),再到如今的回归自然、甚至质疑PHP模板引擎存在的必要性这几个发展阶段。 PHP中到底有没有必要使用模板引擎?模板引擎的原理是什么?为什么Smarty会那么的流行,而如今在PHP社区又引起如此大的争论?这些都是李苦李在接下来的PHP模板引擎的原理与实践系列文章中要讨论的问题。 2.代码分层的思想 PHP作为轻巧灵活的脚本语言,非常适合Web开发这种开发周期短、需求变化快、强调用户体验的需求和业务。PHP早起开发,通常都是PHP代码和HTML混写,代码中到处可见数据库操作、逻辑判断、HTML代码生成,甚至Javascript代码等。对于小型项目,这种编码方式能够很快的完成需求。但是一旦项目扩大后,前端逻辑会越来越复杂,这种完全混写的方式必将造成代码可读性差和后期维护困难等等问题。 在PHP发展初期,我们可能这么写: <html> <head> <meta http-equiv="content-type"content="text/html;charset=utf-8"> <title>最原始的PHP编码风格 - 李苦李</title> </head> <body> <table> <tr> <td>ID</td> <td>姓名</td> </tr> <?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { echo"<tr><td>".$row['id']."</td><td>" .$row['username']."</td></tr>"; } mysql_free_result($result); ?> </table> <?php //其他功能模块 ?> </body> </html> 显而易见,对于上述代码无论是在可读性、可维护性还是在代码的复用性上都是极其差的。需要想办法实现数据生成和显示的分离,通常最容易想到的办法就是把和数据库打交道的代码单独放到一个文件中,显示数据的部分放到另一个文件中。新建文件data.php并获取数据,如以下代码所示: <?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { $data[] =$row; } mysql_free_result($result); ?> 这两种做法都没有实现PHP代码和HTML代码的分离,但是第二种做法相比第一种做法实现了数据获取和数据展示的分离。在第二种处理方法中,其中一个文件专门负责和数据库交互,获取和处理数据。然后交由另一个文件显示数据,这个负责显示的文件只是进行一些简单的逻辑操作,例如循环、判断、输出等。显然,第二种处理方式比第一种处理方式更加易于维护。 对于第二种处理方式,我们还可以使用HereDoc语法使其更简洁,代码如下所示: <?php foreach($dataas$value) { echo<<< TM <tr><td>$value[id]</td><td>$value[username]</td></tr>; TM; } ?> 第二种处理方式即原生态的PHP模板机制,是当前一些PHP程序所采用的模板机制,特点就是简单灵活、符合PHP的语法和使用习惯、学习成本低。缺点就是不能实现一些高级功能,例如实现可配置化、缓存、使得模板文件脱离PHP语法等等。今天先写到这里,这些问题我们将会在接下来的文章中陆续解决。 文章来源:http://www.likuli.com/single/42

(0)

相关推荐

  • 如何自学java编程

    java是面向过程的编程语言:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计 ...

  • 一个编程小白,如何入门APP软件开发领域?

    近些年,互联网创业火得不得了!一时间,满世界都在招做App软件开发的专业人员.从大众角度来看,学编程,写代码,是一件非常困难的事情.但是,App开发人员的工资那么诱人,让很多小白也跃跃欲试想学一下.那 ...

  • DedeCms(织梦)模版制作教程及标记语法详解

    一、织梦(Dedecms)简介: 织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历了二年多的发展,目前的 ...

  • nodejs个人博客载入页面开发教程

    本文为大家分享了nodejs个人博客开发的载入页面,具体内容如下 模板引擎 使用ejs作为我们博客的前端模板引擎,用来从json数据生成html字符串 安装:npm install ejs -save ...

  • 织梦的分类筛选功能分享

    织梦默认的列表页是没有筛选功能的,但是我们做SEO的都知道,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便的找到自己所需要的东西,实现这个联动筛选功能需要对织梦进行二次开发,下面就告 ...

  • 2015年JAVA开源CMS系统排行榜

    首先还是介绍一下什么是CMS. CMS(Content Management System),中文叫作整站系统.文章系统. 大概2004以前,如果想进行网站内容管理,基本上都是靠手工维护,但千变万化的 ...

  • PHP技巧:PHP缓存技术的使用技巧分享

    操作方法 01 但数据库中有些数据是完全静态的或不太经常变动的,缓存系统会通过把SQL查询的结果缓存到一个更快的存储系统中存储, 从而避免频繁操作数据库而很大程度上提高了程序执行时间,而且缓存查询结果 ...

  • php开发学什么?

    PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使 ...

  • Java与PHP的区别

    相信对于学习编程的初学者来说,选择什么样的语言很重要,也很纠结:可能有很多人对各类语言如Java,PHP,C++,Python等都一头雾水:其中java与PHP应该是大多数人的纠结点,他们是近几年市场 ...