thinkPHP的模板是做什么用的
thinkPHP的模板是做什么用的
问题
为什么PHP中ThinkPHP有做类似模板引擎的东西?smarty也是?这些到底有何用?
解答
项目小,一个人折腾的时候,怎么快怎么来,构建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标签主要完成一些逻辑判断、控制和循环输出,并且可扩展
这种方式的结合保证了模板引擎的简洁和强大的有效融合。
thinkPHP的模板是做什么用的的更多相关文章
- linux下, 再次遇到使用thinkphp的模板标签时,报错used undefined function \Think\Template\simplexml_load_string() 是因为没有安装 php-xml包
linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...
- (转)ThinkPHP自定义模板标签详解
转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就 ...
- thinkphp在模板中使用php的函数
thinkphp在模板中使用php的函数 使用 {:函数名} 的形式 例如: // 获取 session 中存的值 {:session('admin.loginname')} // 输出当前日期 {: ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- 如何让ThinkPHP的模板引擎达到最佳效率
默认情况下ThinkPHP框架系统默认使用的模板引擎是内置模板引擎.内置模板引擎支持模板文件中采用php原生态代码和模板标签的混合使用.ThinkPHP官方开发文档说,这种默认的内置模板引擎的性能是高 ...
- THINKPHP 默认模板路径替换
APP_PATH // 当前项目目录APP_NAME // 当前项目名称 ACTION_NAME // 当前操作名称 CACHE_PATH // 项目模版缓存目录 CONFIG_PATH //项目配置 ...
- ThinkPHP添加模板时,犯的三个错
错误一:低级错误,将n打成看m,如图1 图1 这个找错,花了我将近2小时.扫了好几遍与之相关的代码,上网查了好些. 错误二:这个算是个低能的高级错误了.具体模板显示的效果如图2 图2 只要将相对地址及 ...
- mvc理念和thinkphp的语法特征 thinkphp引入模板
mvc即模型(model)-视图(view)-控制器(controller)的缩写 控制器很重要,功能性的东西要靠它实现,模型我还没接触到,只知道它对数据库负责,类似一个大控件吧... 速度... 一 ...
- 蓝松短视频SDK支持AE模板, 可做类似微商视频, 小柿饼的效果等
AE模板: 是指设计师用Adobe After Effect做好各种视频动画,比如炫酷视频,文艺/搞笑的场景,相册效果等,根据我们的指导文件导出.蓝松SDK会解析导出的文件,自动还原成AE设计时的动画 ...
随机推荐
- SQL SERVER-常用命令2
1.创建新表 create table mytest ( id int primary key identity(1,1),--主键,自动+1 name varchar(20) unique notn ...
- WinServer-IIS-IIS负载均衡
安装应用程序路由 提供的服务器的地址必须是可以访问,不然无法进入到下面的这个管理界面 来自为知笔记(Wiz)
- centos6.5配置SSH免password登录
创建新用户:useradd hadoop 设置password:passwd hadoop,输入自己想要的password就可以.之后su hadoop切换用户 改动主机名:vim /etc/sysc ...
- spark学习及环境配置
http://dblab.xmu.edu.cn/blog/spark/ 厦大数据库实验室博客 总结.分享.收获 实验室主页 首页 大数据 数据库 数据挖掘 其他 子雨大数据之Spark入门教程 林子 ...
- JAVA设计模式之【组合模式】
组合模式 用面向对象的方式来处理树形结构 组合多个对象形成树形结构以表示具有"整体-部分"关系的层次结构. 在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类的 ...
- ES线程池设置
每个Elasticsearch节点内部都维护着多个线程池,如index.search.get.bulk等,用户可以修改线程池的类型和大小,线程池默认大小跟CPU逻辑一致 一.查看当前线程组状态 cur ...
- 解决django.db.utils.InternalError: (1049, "Unknown database 'exam_db'")
先检查seeting数据库配置DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'eaxm_db', ' ...
- 092117-6265-01.dmp 蓝屏日志文件
Microsoft (R) Windows Debugger Version 10.0.15063.137 AMD64 Copyright (c) Microsoft Corporation. All ...
- 51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)
题目: 这道题有一个坑点:两种交通工具同时出发,中途不能停留在同一个小镇. 其实想通了就很简单,因为要么火车一步到达,要么汽车一步到达.不可能停留在同一个地方. 可是我还WA了好几次,蠢哭.想用BFS ...
- <%=%>、<%%>、<%@%>、<%#%>的区别
1.<%= %> 里面放变量名,获取后台的变量值,直接输入变量到页面上,里面放的变量名,未经过encode eg: 后台: seession["ab"]=ab; 前台: ...