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 相关文章推荐
PHP静态新闻列表自动生成代码
Jun 14 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
PHP句法规则详解 入门学习
Nov 09 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
laravel安装和配置教程
Oct 29 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
php常用的工具开发整理
Sep 26 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
PDO::quote讲解
2019/01/29 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
Angular路由简单学习
2016/12/26 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python三元运算符实现方法
2013/12/17 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
工作自我评价怎么写
2014/01/29 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
学校文明单位申报材料
2014/05/06 职场文书
新员工入职欢迎词
2015/01/23 职场文书
幼师大班个人总结
2015/02/13 职场文书
党支部培养考察意见
2015/06/02 职场文书
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA