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代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
php实现源代码加密的方法
Jul 11 PHP
php实现异步数据调用的方法
Dec 24 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
PHP定义字符串的四种方式详解
Feb 06 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 应用程序安全防范技术研究
2009/09/25 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
PHP 无限级分类
2017/05/04 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
常用的javascript设计模式
2017/01/11 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python编写一个优美的下载器
2018/04/15 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
大专生自荐信
2013/10/04 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
企业党员公开承诺书
2014/03/26 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
成事在人观后感
2015/06/16 职场文书