php模板引擎原理是作为视图层和模型层分离的一种有效解决方案,让前后端更好的分工协作,来自于经典的MVC模型,即【模型层-视图层-控制器模型】,将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。

php模板引擎原理是:

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社区又引起如此大的争论?这些都是在接下来讨论的问题。

2代码分层的思想

PHP作为轻巧灵活的脚本语言,非常适合Web开发这种开发周期短、需求变化快、强调用户体验的需求和业务。PHP早起开发,通常都是PHP代码和HTML混写,代码中到处可见数据库操作、逻辑判断、HTML代码生成,甚至Javascript代码等。对于小型项目,这种编码方式能够很快的完成需求。但是一旦项目扩大后,前端逻辑会越来越复杂,这种完全混写的方式必将造成代码可读性差和后期维护困难等等问题。

在PHP发展初期,我们可能这么写:

最原始的PHP编码风格 - 李苦李

ID 姓名

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"

".$row['id'].""

.$row['username']."

";

}

mysql_free_result($result);

?>

//其他功能模块

?>

显而易见,对于上述代码无论是在可读性、可维护性还是在代码的复用性上都是极其差的。需要想办法实现数据生成和显示的分离,通常最容易想到的办法就是把和数据库打交道的代码单独放到一个文件中,显示数据的部分放到另一个文件中。新建文件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

$value[id]$value[username];

TM;

}

?>

第二种处理方式即原生态的PHP模板机制,是当前一些PHP程序所采用的模板机制,特点就是简单灵活、符合PHP的语法和使用习惯、学习成本低。缺点就是不能实现一些高级功能,例如实现可配置化、缓存、使得模板文件脱离PHP语法等等。今天先写到这里,这些问题我们将会在接下来的文章中陆续解决。

php模板引擎哪个好,php模板引擎原理是什么?相关推荐

  1. php模板引擎如何实现,php模板引擎技术简单实现

    用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化 tpl.class.php主要解析 as ...

  2. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  3. 使用 .NET Core模板引擎创建自定义的模板和项目

    本文要点 .NET CLI 包含了一个模板引擎,它可以直接利用命令行创建新项目和项目项.这就是"dotnet new"命令. 默认模板集涵盖了默认控制台和基于 ASP.NET 的应 ...

  4. 自定义 Javascript 模板规则,打造轻量级模板引擎

    直接贴 TemplateHelper 代码了: var TemplateHelper = {englishChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",b ...

  5. php模板引擎如何实现,PHP模板引擎如何实现

    假设使用标签形式作为模板语法 在解析环节我想到两种实现方式 1. 利用正则获取标签内容,然后将标签进行规则性的替换并使用eval进行解析,解析完成后再用正则进行替换 2. 利用正则获取标签内容,然后将 ...

  6. twig模板引擎使用php,Twig模板引擎

    使用Twig Twig是一个灵活,快速,安全的PHP模板语言.它将模板编译成经过优化的原始PHP代码.Twig拥有一个Sandbox模型来检测不可信的模板代码.Twig由一个灵活的词法分析器和语法分析 ...

  7. 模板引擎ejs与html,后台模板引擎ejs与前台模板引擎artTemplate的简单介绍

    动态网页是指前端页面当中的数据内容来源于后台数据库,前端的html代码会随着后台数据的变化而变化,是动态生成的.制作动态网页有两种方式,一种方式是在后台拿到前端的html模板,利用后台模板引擎(如ej ...

  8. 什么是模板引擎?常见的模板引擎有哪些?Thymeleaf的常用指令介绍。

    1.模板引擎是什么? 模板引擎是以业务逻辑层和表现层分离为目的的,将规定格式的模板代码转换为业务数据的算法实现. 它可以是一个过程代码.一个类,甚至是一个类库.不同的模板引擎其功用也不尽相同,但其基本 ...

  9. 什么是模板引擎?常见的模板引擎有哪些?thymeleaf的常用指令介绍

    一.模板引擎概念 模板引擎是为了解决用户界面(显示)与业务数据(内容)分离而产生的. 它可以生成特定格式的文档,常用的如格式如HTML.xml以及其他格式的文本格式.其工作模式如下: 举个例子,我想买 ...

  10. 提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333)

    原文地址: juejin.im/post/5c7339- 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一些提高生产力的 ...

最新文章

  1. SAP_SD常用增强
  2. python gui漂亮_python 漂亮的gui
  3. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
  4. 径向基函数插值(4)三维数据的插值
  5. python迭代器与生成器_Python的迭代器和生成器
  6. 二十五、深入Python中的协程
  7. 清单文件,测试,打电话和发短信应用
  8. Bootstrap 分页导航的尺寸
  9. vue.js v-if
  10. 【LeetCode】15.Longest Common Prefix
  11. 反射根据每一列的列名获取List T 中的列值
  12. 伪静态页面在iis7.0中的配置
  13. c语言自治区二级考试题库,新疆自治区计算机二级c语言考试题库---副本.pdf
  14. 手机中的传感器及其应用场景
  15. win10系统下载文件被windows defender smartscreen 阻止怎么办,但是系统没有筛选器
  16. python编写端口扫描器_使用Python编写简单的端口扫描器的实例分享
  17. 自然语言理解和自然语言处理_4种自然语言处理和理解的方法
  18. 【数据库】分布式数据库设计
  19. 关于智能运维(AIOps)的学与思
  20. iOS小技能:设备ID除了使用_idfa、_idfv 还可使用其他替代方案(使用Keychain 存储UUID)

热门文章

  1. CMD中使用attrib命令设置文件只读、隐藏属性详解
  2. _declspec(naked) 使用(裸函数)
  3. C语言中 sscanf 的用法
  4. python无法打开excle_无法打开Excel fi
  5. struct sockaddr与struct sockaddr in struct sockaddr un的区别和联系
  6. 算法 - 折半查找(C#)
  7. 二数和,三数和,四数和的优化总结
  8. java动漫网站开题报告_基于java的校园论坛网站的开发与设计开题报告.doc
  9. 服务器装系统无显示屏,服务器系统安装后没有桌面
  10. @Scheduled(cron=““) spring定时任务时间设置