ThinkPHP模版引擎之变量输出详解


Posted in PHP onDecember 05, 2014

本文实例分析了ThinkPHP模版引擎中变量输出的用法。分享给大家供大家参考。具体分析如下:

我们已经知道了在Action中使用assign方法可以给模板变量赋值,赋值后怎么在模板文件中输出变量的值呢?

如果我们在Action中赋值了一个name模板变量:

$name = 'ThinkPHP';

$this->assign('name',$name);

使用内置的模板引擎输出变量,只需要在模版文件使用:
{$name}

模板编译后的结果就是

<?php echo($name);?>

最后运行的时候就可以在标签位置显示ThinkPHP的输出结果,注意模板标签的{和$之间不能有任何的空格,否则标签无效。普通标签默认开始标记是 {,结束标记是 },也可以通过设置TMPL_L_DELIM和TMPL_R_DELIM进行更改,例如,我们在项目配置文件中定义:

'TMPL_L_DELIM'=>'<{',  

'TMPL_R_DELIM'=>'}>',

那么,上面的变量输出标签就应该改成:

<{$name}>

后面的内容我们都以默认的标签定义来说明,assign方法里面的第一个参数才是模板文件中使用的变量名称,如果改成下面的代码:

$name = 'ThinkPHP';

$this->assign('name2',$name);

再使用{$name} 输出就无效了,必须使用 {$name2}才能输出模板变量的值了.如果我们需要把一个用户数据对象赋值给模板变量:
$User = M('name');

$user = $User->find(1);

$this->assign('user',$user);

也就是说$user其实是一个数组变量,我们可以使用下面的方式来输出相关的值:
{$user['name']}//输出用户的名称

{$user['email']} //输出用户的email地址

如果$user是一个对象而不是数组的话.
$User = M('name');

$User->find(1);

$this->assign('user',$User);

可以使用下面的方式输出相关的属性值:
{$user:name}// 输出用户的名称

{$user:email} // 输出用户的email地址

3.1版本以后,类的属性输出方式有所调整,支持原生的PHP对象写法,所以上面的标签需要改成:
{$user->name}// 输出用户的名称

{$user->email} // 输出用户的email地址

为了方便模板定义,还可以支持点语法,例如,上面的 
{$user['name']}// 输出用户的名称

{$user['email']} // 输出用户的email地址

可以改成
{$user.name}

{$user.email}

因为点语法默认的输出是数组方式,所以上面两种方式是在没有配置的情况下是等效的,我们可以通过配置TMPL_VAR_IDENTIFY参数来决定点语法的输出效果,以下面的输出为例:{$user.name}

如果TMPL_VAR_IDENTIFY设置为array,那么

{$user.name}和{$user['name']}等效,也就是输出数组变量.

如果TMPL_VAR_IDENTIFY设置为obj,那么

{$user.name}和{$user:name}等效,也就是输出对象的属性。

如果TMPL_VAR_IDENTIFY留空的话,系统会自动判断要输出的变量是数组还是对象,这种方式会一定程度上影响效率,而且只支持二维数组和两级对象属性。

如果是多维数组或者多层对象属性的输出,可以使用下面的定义方式:

{$user.sub.name}//使用点语法输出

或者使用

{$user['sub']['name']}// 输出三维数组的值  

{$user:sub:name}// 输出对象的多级属性

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
开发大型PHP项目的方法
Oct 09 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
php实现的简单检验登陆类
Jun 18 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
自制PHP框架之模型与数据库
May 07 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
ThinkPHP添加更新标签的方法
Dec 05 #PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 #PHP
php树型类实例
Dec 05 #PHP
Yii框架form表单用法实例
Dec 04 #PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 #PHP
Yii分页用法实例详解
Dec 04 #PHP
Yii配置文件用法详解
Dec 04 #PHP
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
大学毕业自我鉴定范文
2014/02/03 职场文书
初中生自我鉴定
2014/02/04 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python django中如何使用restful框架
2021/06/23 Python
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript