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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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下使用无限生命期Session的方法
2007/03/16 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
保卫钓鱼岛口号
2014/06/20 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
开网店计划分析
2019/07/30 职场文书