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时间戳使用实例代码
Jun 07 PHP
php include,include_once,require,require_once
Sep 05 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 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的类 功能齐全的发送邮件类
2006/10/09 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
javascript 模拟点击广告
2010/01/02 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python中遍历列表的方法总结
2019/06/27 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
销售高级职员求职信
2013/10/29 职场文书
中专三年学习的个人自我评价
2013/12/12 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
不同意离婚上诉状
2015/05/23 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
子女赡养老人协议书
2016/03/23 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
Java中的继承、多态以及封装
2022/04/11 Java/Android