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模板技术[转]
Jan 04 PHP
php 特殊字符处理函数
Sep 05 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
php控制文件下载速度的方法
Mar 24 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
php + nginx项目中的权限详解
May 23 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 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中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
jupyter安装小结
2016/03/13 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
python3.5的包存放的具体路径
2020/08/16 Python
满月酒答谢词
2014/01/14 职场文书
小学英语教学反思
2014/01/30 职场文书
旷课检讨书3000字
2014/02/04 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python