ThinkPHP3.1.3版本新特性概述


Posted in PHP onJune 19, 2014

ThinkPHP3.1.3版本有一些特性,还是值得关注的,下面来简单说下。

1、异常方面的改进

新版的ThinkPHP3.1.3重写了异常类ThinkException(其实是完全简化成了直接继承系统Exception类),并且把异常逻辑改进封装到Think类中。主要涉及到Think类的appException方法和halt函数。
并且改进后的异常处理支持系统致命错误的捕获,Think类增加了fatalError方法,原理是使用了

register_shutdown_function(array('Think','fatalError'));

因此可以使得系统致命错误通过统一的异常模板界面友好提示。

2、对PDO参数绑定的支持

因为ThinkPHP3.*版本采用的是混合数据库驱动,同时也支持PDO方式,但之前版本并未针对PDO做优化,只是简单的封装。3.1.3版本完善了对PDO以及Sqlarv的支持,因为PDO和sqlsrv都支持参数绑定操作(注意,不支持参数绑定的数据库和驱动无法使用参数绑定功能)。

系统对参数绑定操作的支持分两种:自动绑定和手动绑定

自动绑定是对于写入操作(这里包括数据的新增和更新),框架会自动把相关数据转换成参数绑定方式执行,这个部分不需要额外处理,因为sqlsrv只有采用参数绑定的方式传值才能支持UTF8数据写入,但是每次写入数据都要采用手动参数绑定的话,就会显得比较麻烦。为了避免和手动参数绑定冲突,自动参数绑定采用的是对字段名md5编码的方式。

手动绑定,通常用于查询条件之类的,并且采用bind连贯操作方法,例如:

$model->where(array('id'=>':id','name'=>':name'))->bind(array(':id'=>$id,':name'=>$name))->select();

3、增加变量安全获取方法

之前版本通过Action类的_post _get等方法来安全获取变量,虽然没问题,但局限是只能在控制器中获取变量,新版把这一功能独立成一个快捷方法I,可以用于任何地方。
使用方法如下:

I('get.id',0); // 获取$_GET['id'] 如果不存在则默认为0
I('post.name','','htmlspecialchars'); // 获取$_POST['name'] 采用htmlspecialchars方法过滤
I('id'); // 获取id参数 自动判断get或者post
I('param.id'); // 获取id参数 自动判断get或者post 和上面用法等效
I('put.id'); // 获取put请求的id参数

还支持获取整个数组,例如:

I('get.'); // 获取$_GET数组
I('post.'); // 获取$_POST数组

在使用I方法的情况下,系统的VAR_FILTERS和DEFAULT_FILTER过滤配置依然有效。

4、where方法的多次调用

模型类的where方法可以支持数组方式的多次调用,例如:

$model->where(array('a'=>1,'c'=>2))->where(array('a'=>3,'b'=>1))->select();

多个where条件的时候,后面的条件会合并到前面的条件,最终的条件等效于:

$model->where(array('a'=>3,'b'=>1,'c'=>2))->select();

5、控制器中的assign方法支持连贯操作

我们可以在控制器使用:

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

或者:

$this->assign(array('name'=>$name,'email'=>$email))->display();
PHP 相关文章推荐
简体中文转换为繁体中文的PHP函数
Oct 09 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
php随机取mysql记录方法小结
Dec 27 PHP
php如何连接sql server
Oct 16 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
php实现查询功能(数据访问)
May 23 PHP
php实例化一个类的具体方法
Sep 19 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 #PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 #PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 #PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 #PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 #PHP
php数组合并array_merge()函数使用注意事项
Jun 19 #PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 #PHP
You might like
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
python中的时区问题
2021/01/14 Python
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
英国电子专家:maplin
2019/09/04 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
西门豹教学反思
2014/02/04 职场文书
项目采购员岗位职责
2014/04/15 职场文书
消防标语大全
2014/06/07 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2014年团支部工作总结
2014/11/17 职场文书
Python图像处理之图像拼接
2021/04/28 Python
vue+element ui实现锚点定位
2021/06/29 Vue.js