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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP clearstatcache()函数详解
Mar 02 PHP
关于crontab的使用详解
Jun 24 PHP
php实现的常见排序算法汇总
Sep 08 PHP
php的ZipArchive类用法实例
Oct 20 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php动态绑定变量的用法
Jun 16 PHP
PHP中foreach()用法汇总
Jul 02 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
PHP使用两个栈实现队列功能的方法
Jan 15 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 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 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
javascript event 事件解析
2011/01/31 Javascript
js post提交调用方法
2014/02/12 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
python中的全局变量用法分析
2015/06/09 Python
python Django框架实现自定义表单提交
2016/03/25 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python装饰器用法与知识点小结
2020/03/09 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
公司同意接收函
2014/01/13 职场文书
股份合作协议书范本
2014/04/14 职场文书
企业文化理念标语
2014/06/10 职场文书
大学专科求职信
2014/07/02 职场文书
经典演讲稿开场白
2014/08/25 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
800字作文之大雪
2019/12/04 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
MySQL修炼之联结与集合浅析
2021/10/05 MySQL