zoukankan      html  css  js  c++  java
  • thinkPHP的模板是做什么用的

    thinkPHP的模板是做什么用的

    问题

    为什么PHP中ThinkPHP有做类似模板引擎的东西?smarty也是?这些到底有何用?

    我是真没发现它们的用处在哪里?分离了前端和PHP的依赖?HTML文件确实没有写PHP代码了,但是却有smarty或者Thinkphp的模板引擎代码在里面,PHP程序员要学,前端人员也要学,这不是反而增加了开发时间和开发难度?吃力不讨好?而且用了模板引擎势必要在PHP层面对HTML代码进行字符串替换解析,都知道字符串替换是很耗性能的,费时又浪费性能的。仅仅为了分离前端跟PHP,我觉得这相当不划算。是否我对其作用(仅仅为了分离前端和PHP,方便各司其职)理解有偏差?请赐教!

    解答

    使用MVC,在View层我也觉得用原生的PHP代码比模板引擎更高效,这个跟项目的大小无关,PHP本身就是最优秀的模板语言
     

    项目小,一个人折腾的时候,怎么快怎么来,构建MVC,解耦页面数据代价比较大,所以你会说没用;
    项目大了,人多了,代码复用、规划、编码规范、人员沟通的成本急剧上升。
    把每个人的工作连接起来,需要规则;
    减少条条框框的束缚,大家各司其责专注自己的工作,避免互相干扰,才能提高效率。

    回到你的问题。我分解成下面四个点:
    1. 为什么要出现模版引擎?
    2. PHP本身不就可以起到直接在HTML结构里面嵌逻辑脚本了吗?
    3.为什么又演变出独立的语法
    4.性能开销怎么考虑

    1. 为什么要出现模版引擎?
    Z:请设想有两个人合作一个项目,一个负责页面部分,一个后台数据。(其实就是前端与后台)
    那么他们应该专注在自己负责的部分。
    以页面的同学为例,他应该只关心数据如何呈现,如何交互,如何将用户数据传给后台。那么目前业内的实践经验是,前端与后台约定好页面参数及接口协议,即可各自独立开发。

    2. PHP本身不就可以起到直接在HTML结构里面嵌逻辑脚本了吗?
    Z:前面说到,合作中应该各自专注自身工作,避免互相干扰。页面的同学直接在页面模版中有可能操作PHP脚本中的全局变量、属性、方法;后台的同学在给页面传值后有可能意外修改到参数。。。这些都是因为他们的环境没能隔离开的缘故。
    那么比较好的方案就是给页面模版一个独立的参数作用域,将页面参数单独传递进去。

    3.为什么又演变出独立的语法
    为了减轻页面开发的学习负担,也让页面更加直观。请比较:
    <div>{{ innerHTML }}</div>
    <div><?PHP echo $innerHTML; ?></div>
    <div><?= $innerHTML; ?></div>
    

    PHP满屏的 分号 + 美元符 其实还真是有很多人看不惯的。
    页面的同学如果没有接触过PHP,估计会被“缺少一个分号没法运行”之类的问题烦死。而且一般页面也不需要处理复杂的逻辑,条件判断 + 循环 + 变量输出 + 转义 应该已经足够了,所以实现一个简洁的语法对独立的前端开发是很有帮助的(顺带一提,这些模版引擎应该也是支持以原生PHP方式来写模版的)

    4.性能开销怎么考虑
    毋庸置疑,性能肯定没有原生PHP来得快。但是权衡上述,其实也是值得的;何况性能这种东西,说实在的几个模版解析还真不是瓶颈所在。后台数据的处理,页面资源加载等等才是大头。何况现在的PHP模版引擎都支持预编译了吧(我记得ThinkPHP里面是预先把模版给编译成原生的PHP页面了)

    thinkPHP手册解释

    本章的内容主要讲述了如何使用内置的模板引擎来定义模板文件,以及使用加载文件、模板布局和模板继承
    等高级功能
    ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用
    了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自
    定义标签库。其特点包括:
    支持XML标签库和普通标签的混合定义;
    支持直接使用PHP代码书写;
    支持文件包含;
    支持多级标签嵌套;
    支持布局模板功能;
    一次编译多次运行,编译和运行效率非常高;
    模板文件和布局模板更新,自动更新模板缓存;
    系统变量无需赋值直接输出;
    支持多维数组的快速输出;
    支持模板变量的默认值;
    支持页面代码去除Html空白;
    支持变量组合调节器和格式化功能;
    允许定义模板禁用函数和禁用PHP语法;
    通过标签库方式扩展。
    每个模板文件在执行过程中都会生成一个编译后的缓存文件,其实就是一个可以运行的PHP文件。
    内置的模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的:
    标签类型描述
    普通标签主要用于输出变量和做一些基本的操作
    XML标签主要完成一些逻辑判断、控制和循环输出,并且可扩展
    这种方式的结合保证了模板引擎的简洁和强大的有效融合。

  • 相关阅读:
    数据类型转换(日期格式转换)
    TextArea控件实时计算总字数,总行数,和每行显示的最大字数
    Java--->判断IP和端口是否可连接
    JavaFX校验IP和端口的合法性
    JavaFX与NetBeans开发工具的一些总结
    Web Service深度剖析
    Spring中AOP和IOC深入理解
    Spring aspect 两种方式实现五种增强
    Struts2错题总结
    Hibernate检索方式和Criteria查询的讲解
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8680693.html
Copyright © 2011-2022 走看看